我是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;
}
谢谢。
答案 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::toupper
和std::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;
}