所以我试图用相应的整数值打印一个字符表。以下是我的代码: -
#include <iostream>
using namespace std;
int main()
{
char i = 'a';
while (i <= 'z')
{
cout << i << '\t' << 'a' + 1 << '\n';
++i;
}
}
我试图在代码中添加char(&#39; a&#39; + 1),这给了我很多错误答案。
输出(正确输出)我在代码中使用static_cast: - 一个97 b 98 c 99 .... z 122
输出我正在使用上面编写的代码: - 98 b 98 ..... z 98
所以我想知道char(&#39; a&#39; +1)和&#39; a&#39;之间有什么区别? + 1和static_cast(i)?
答案 0 :(得分:5)
表达式'a' + 1
的类型为int
。
请注意,没有char operator+(char, char)
,但有int operator+(int, int)
。这就是a
被提升为int
并且表达式为int
的结果的原因。有关详细信息,请参阅Integral promotion:
特别是,算术运算符不接受小于
int
的类型作为参数,并且在左值到右值转换后自动应用积分促销(如果适用)。此转换始终保留该值。
char('a' + 1)
为char
,因为它明确地将int
'a' + 1
强制转换为char
。
答案 1 :(得分:1)
请发布编译的代码。
让我们一步一步地完成它:
char i = a
您正尝试使用变量i
初始化变量a
。 while (i < z)
中的同一问题,您尝试将变量i
与变量z
进行比较。
此外,您错过了标题<iostream>
。
所以正确的代码是
#include <iostream>
using namespace std;
int main()
{
char i = 'a';
while (i < 'z')
{
cout << i << '\t' << 'a' + 1 << '\n'; //how can i use char('a'+1)
++i;
}
}
如果您想将'a' + 1
显示为字符,则必须明确将其转换为char
,因为'a' + 1
会评估为int
:char('a' + 1)
。
我想,你正在寻找char(i + 1)
。
您也可以将其转换为for
- 循环:
int main() {
for (char i = 'a'; i < 'z'; ++i) {
cout << i << '\t' << char(i + 1) << '\n';
}
}
答案 2 :(得分:0)
您的代码中存在一些编译错误。您应该了解char i = a
和char i = 'a'
之间的区别。
然而,回到实际问题,我相信您想要打印的内容可以实现:
#include <iostream>
using namespace std;
int main()
{
char i = 'a';
while (i < 'z')
{
cout << i << '\t' << static_cast<int>(i) << '\n';
++i;
}
}
如果我理解正确,您希望在第一列中打印带有字母表的表,在第二列中打印相应的ASCII值。
由于你大部分都失败了,所以使用static_cast<int>(i)
将字母表转换为int值,这就是所谓的类型转换。
理解C ++中不同类型的强制转换以及C和C ++强制转换之间的区别是here。