char(&#39; a&#39; +1)和&#39; a&#39;之间有什么区别? + 1和static_cast <int>(i)?

时间:2018-02-26 16:10:43

标签: c++

所以我试图用相应的整数值打印一个字符表。以下是我的代码: -

#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)?

3 个答案:

答案 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初始化变量awhile (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会评估为intchar('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 = achar 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

相关问题