C++在组合字符时给出随机值

ask*_*sao 0 c++

我有一个字符串039,我有以下代码

cout<<str2[1]+str2[0]+str2[2]<<endl;
Run Code Online (Sandbox Code Playgroud)

我希望这能给我309,但它给了我156.如何分别考虑他们给我的一切 3 0 9

Ron*_*Ron 6

这是因为您将字符/它们的基本积分值相加在一起.如果要输出字符本身使用<<运算符,而不是+.字符及其基础值是(假设ASCII):

'3'    51  
'0'    48  
'9'    57  
Run Code Online (Sandbox Code Playgroud)

表达:

str2[1] + str2[0] + str2[2]
Run Code Online (Sandbox Code Playgroud)

将字符加在一起,它不会逐个将它们发送到标准输出,因此表达式变为:

51 + 48 + 57
Run Code Online (Sandbox Code Playgroud)

导致156.使用运算符<<代替:

#include <iostream>
#include <string>

int main() {
    std::string str2 = "039";
    std::cout << str2[1] << str2[0] << str2[2] << '\n';
}
Run Code Online (Sandbox Code Playgroud)

正如在评论中指出,字符类型都是整数类型和您的char类型可能涵盖的范围-127127.这也假设您使用ASCII编码将字符映射到上面给出的值.