当我运行以下代码并添加str.front()+ str.back时,它会给我200,但为什么呢?

时间:2019-02-18 18:48:25

标签: c++ string

string str = "abcdefg"; 
cout << str.back() + str.front();

C ++控制台: 200

3 个答案:

答案 0 :(得分:0)

#include <iostream>

int main() {
    std::string str = "abcdefg";
    for(int v : str) {
        std::cout << v << " " << static_cast<char>(v) << "\n";
    }
}

可能的输出:

97 a    // front()
98 b
99 c
100 d
101 e
102 f
103 g   // back()

97 + 103 = 200

答案 1 :(得分:0)

  

当我运行以下代码并添加str.front()+ str.back时,它给了我200,但为什么呢?

字符被编码为整数。 char是整数类型。当算术运算(例如加法)的操作数是小于int的整数类型时,这些操作数将提升为int,这也是表达式的结果类型。这就是为什么输出不是编码字符,而是整数的十进制表示的原因。

为什么值200恰好发生在系统的字符编码中,所以将'a'表示的值和'g'表示的值加在一起就等于200。

答案 2 :(得分:0)

您要添加两个char,这将导致一个整数。

如果要将两个字符组合成一个字符串,则必须至少给它们一个字符串类型,例如:

cout << str.back() + string{str.front()};

cout << str.back() + str.substr(0, 1);

但是,如果您只想输出两个字符-您可以一次只输出一个字符:

cout << str.back() << str.front();