我的代码现在有效,但为什么呢?添加' 0'到一个字符串

时间:2014-10-03 20:13:23

标签: c++ string casting

我已经发布了我正在处理的代码的相关部分。起初,我试图在字符串的末尾添加一个整数。

但是,我找到的方法都没有正常工作(to_string,itoa,cast)。每当我简单地将整数添加到字符串中时,我会得到字符串加上一个奇怪的小符号,例如笑脸或铲子。但是,当我向行'0'添加str += i时,它就可以了!

问题是,我不明白为什么。我希望有人愿意向我解释这里到底发生了什么,为什么会有效?我只是不明白如何在没有强制转换的情况下为字符串添加整数,以及为什么添加char(我认为?)会使它工作。

感谢所有花时间阅读此内容的人。

int main()
{
    string str = "Filler";
    int i = 2;       
    str += i+'0';      //if I remove the +'0' it no longer works as intended.
    cout << str << endl;
    return 0;

}

2 个答案:

答案 0 :(得分:1)

i+'0'这里是将字符'0'的ASCII值添加到i
的值 i+'0'等于字符&#39; 2&#39;
的ASCII码 所以你将str连接到一个数字(在我的计算机上是50)(不同于2但是这是2的ASCII代码)
 (请注意,50基于我的计算机的ASCII表,可能与您不一样 - 我不确定它是否对所有人都是唯一的)
并且ASCII码为2的字符不是'2',这是你得到的奇怪字符

答案 1 :(得分:0)

这是纯粹的运气; - )

您的代码将i添加到&#39; 0&#39;的ascii值(=&gt; 48)。

在您的样本中2 + 48 = 50。而运气50是&#39; 2&#39;的ascii值。所以它有效!!

如果您尝试使用&#39; a&#39;而不是&#39; 0&#39; (str + = i +&#39; a&#39 ;;)你将获得一个&#39; c&#39;在你的字符串的末尾。

所以,不要这样做; - )

这里讨论添加整数的正确方法:

How to concatenate a std::string and an int?

祝你好运!