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

时间:2018-02-22 15:13:03

标签: c++

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

cout<<str2[1]+str2[0]+str2[2]<<endl;

我希望这会给我309,但它会给我156。如何单独考虑他们给我3 0 9的所有内容?

3 个答案:

答案 0 :(得分:6)

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

'3'    51  
'0'    48  
'9'    57  

表达式:

str2[1] + str2[0] + str2[2]

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

51 + 48 + 57

导致156。改为使用operator<<

#include <iostream>
#include <string>

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

正如评论中所指出的,character types是完整类型,而您的char类型可能涵盖从-127127的范围。这也假设您正在使用ASCII encoding将字符映射到上面给出的值。

答案 1 :(得分:1)

如果str2 [1]是char,那么:

Char就像int,但是从-127到127(或0到255)。请参阅ASCII码 然后,如果您执行str2[1]+str2[0]+str2[2],您将获得一些ASCII代码 在c ++中,你不能char+char and get 2 chars。 这样做:

cout<<str2[1]<<str2[0]<<str2[2]<<endl;

答案 2 :(得分:0)

如果您需要以字符串形式检索结果,请使用ostringstream

#include <sstream>
std::ostringstream stream;
stream << str2[1] << str2[0]<< str2[2];
std::string res = stream.str();
std::cout <<"> " << res << std::endl;