使用for循环打印abc大写和小写c ++

时间:2018-10-31 15:22:54

标签: c++ for-loop codeblocks

我是c ++的新手,我想使用控制台应用程序像这样打印"abc"的小写和大写字母。

Aa 

Aa, Bc 

Aa, Bc, Cc 

Aa, Bc, Cc, Dd  

以此类推,直到Zz

我的简单代码是:

{ 
char abc;
for(abc = 'A'; abc <= 'Z'; abc++){
    cout<< abc <<",";
}
return 0;
}  

谢谢。

3 个答案:

答案 0 :(得分:2)

请勿使用(char)(abc+32)作为(感叹)赞成的评论建议。如此小的代码段中存在几个问题:

  • 您不应使用幻数。这里的32是一个幻数。它是什么?它从何而来?在ASCII编码中,它是'a' - 'A'。如果您需要写这个数字,请不要写32,而要写'a' - 'A'。但是,正如我们接下来将要看到的,这个数字有问题:

  • 使用'a' - 'A'在大小写之间转换仅适用于ASCII编码。尽管C++是最常用的编码,但并未指定char使用ASCII。底线:它不是便携式的。如果使用它,请在某处断言所使用的编码是ASCII

  • 在C ++中,应避免使用C样式的强制转换,例如(char)(...)。请改用static_cast

在C ++中进行大小写转换的简单可移植方法是使用std::toupperstd::tolower

static_cast<char>(std::tolower(abc))

不幸的是,由于C的遗留问题,这些函数可用于int数据类型(尽管大多数情况下它们将其解释为char),因此您需要进行强制转换。

答案 1 :(得分:1)

在我建议有一个外部循环(循环26次)之前修改您的工作方式。并使用tolower将大写转换为小写,但由于它返回整数,因此应将其转换为char。

char abc;
int j;
for(int i = 0;i<26;i++)
{
    j = 0;
    for(abc = 'A'; abc <= 'Z' && j<=i; abc++){
        cout<< abc <<static_cast<char>(std::tolower(abc));
        if(j+1 <= i)
            cout<<", ";
        j++;
    }
    cout<<endl<<endl;
}

答案 2 :(得分:0)

它实际上是一个简单的逻辑。您需要如下循环:

#include<iostream>

int main()
{
    for(int i = 0; i < 26; i ++){
        for(int j = 0; j <= i; j++)
            std::cout<<(char)(65 + j)<<(char)(65 + j + 32)<<", ";
        std::cout<<std::endl;
    }
    return 0;
}