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

时间:2015-11-14 18:23:20

标签: c++ alphabet

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

     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;
}

4 个答案:

答案 0 :(得分:3)

使用嵌套循环结构。使用外环来“走”三角形,

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

    lineLength++;
    cout << endl;
}

使用内循环来“走”字母表(你已经完成了大部分工作):

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;
}

我看到其他人发布了类似的答案。在这两个答案之间,你应该能够找到自己的方式。我没有编译和运行此代码,但我相信它应该工作或非常接近。

答案 1 :(得分:3)

不要将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;
}

答案 2 :(得分:3)

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

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;
}

答案 3 :(得分:0)

我们必须从位置运行循环在'A'字符之上 直到我们到达你进入的charanter

    // 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;
}