我有一个字符串039
,我有以下代码
cout<<str2[1]+str2[0]+str2[2]<<endl;
我希望这会给我309
,但它会给我156
。如何单独考虑他们给我3 0 9
的所有内容?
答案 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
类型可能涵盖从-127
到127
的范围。这也假设您正在使用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;