在 C++ 中用给定的字母打印三角形

Printing triangle with given letter in C++

我想用给定的字母打印一个三角形。例如,如果我输入 D,程序应该 return:

     A
     AB
     ABC
     ABCD

到目前为止,我已经设法打印了示例中给定字母之前的所有字母,但是如您所见,这种方法不是很有效,因为我需要对所有 26 种情况都这样做,因为英文字母表是 26 个字符.有什么方法可以优化我的代码吗?

#include <iostream>

using namespace std;

int main() {
    char i;
    cout << "Enter char ";
    cin >> i;
    int c = static_cast<int>(i);
    if (65 < c) {
        cout << "A";
        cout << endl;
    }
    if (66 < c) {
        cout << "AB";
        cout << endl;
    }
    if (67 < c) {
        cout << "ABC";
        cout << endl;
    }

    for (int i = 64; i < c; i++) {
        cout << static_cast<char>(i + 1);
    }

    return 0;
}

我们必须运行循环起始位置在'A'字符以上 直到我们到达您输入的字符

    // procead until reached input letter
    while (chNew != c)
    {
             // go to next letter
        chNew++;

             // start with 'A' until current char + 1
        for (int j = 'A'; j < chNew + 1; j++)
            cout << (char)j;
             // go to next line
        cout << endl;
    }

在每个循环中,我们将字符值递增 1 以转到下一个值

// go to next letter
chNew++;

内循环简单地将字符从 A 打印到相对于当前 chNew + 1 的下一个值,这是因为我们还想将当前字符包含到我们的打印行中。

这是您的工作代码。

#include <iostream>

using namespace std;

int main() 
{
    char i;
    cout << "Enter char ";
    cin >> i;
    int c = static_cast<int>(i);

    // start with 'A' - 1 character
    char chNew = 'A' - 1;

    // procead until reached input letter
    while (chNew != c)
    {
             // go to next letter
        chNew++;

             // start with 'A' until current char + 1
        for (int j = 'A'; j < chNew + 1; j++)
            cout << (char)j;
             // go to next line
        cout << endl;
    }

    // we have done 
    return 0;
}

使用嵌套循环结构。使用外循环 'walk' 沿着你的三角形,

lineLength = 1;
while(lineLength <= (c - 64)){
    ...stuff...

    lineLength++;
    cout << endl;
}

使用内部循环 'walk' 按字母顺序向下(您已经完成大部分操作):

for (int i = 0; i < lineLength; i++) {
    cout << static_cast<char>(i + 65);
}

放在一起:

lineLength = 1;
while(lineLength <= (c - 64)){
    for (int i = 0; i < lineLength; i++) {
        cout << static_cast<char>(i + 65);
    }

    lineLength++;
    cout << endl;
}

我看到其他人发布了类似的答案。在这两个答案之间,您应该能够找到自己的出路。我还没有编译 运行 这段代码,但我相信它应该可以工作或者非常接近。

不要将 ascii 整数值硬编码到代码中。明确使用字符或字符串文字(例如 'A' 而不是 65

从精确打印一行的辅助函数开始

// prints all the characters of the alphabetic sequence from "A" to the final char designated by <c>
void printTriangleLine(char c)
{
    if ((c < 'A') || (c > 'Z'))
    {
        return;
    }

    for (char x = 'A'; x <= c; x++)
    {
        cout << x;
    }

    cout << endl;
}

然后把它们放在你的主目录中:

int main()
{
    char i;
    cout << "Enter char ";
    cin >> i;

    if ((i < 'A') || (i > 'Z'))
    {
        return 0;
    }

    for (char x = 'A'; x <= i; x++)
    {
        printTriangleLine(x);
    }
    return 0;
}

你肯定需要加强对循环的理解。这个工作得很好,它甚至对输入的内容进行了一些检查,并最终将小写字母转换为大写字母。

char first = 'A';
char last = 0;

cout << "Enter a char: ";
cin >> last;
fflush(stdin);
cout << "\n\n";

if ((last > 96) && (last < 123)) //97 to 122 are lower case letters
{
    last -= 32; //32 is the delta between each lower case letter and its upper case "twin"
}

if ((last > 64) && (last < 91))
{
    for (char i = 65; i <= last; i++)
    {
        for (char j = 65; j <= i; j++)
        {
            cout << j;
        }
        cout << "\n";
    }
}
else
{
    cout << "\nWrong character!!\n\n";
    return 0;
}