使用string时,不要在一行里面加两个字符

在做pat甲级1061 Dating时,出现了问题,就是有几个点是错误。
后来发现,原来是有一行代码企图在一行里面将两个字符常量加到一个string中。
示例如下

#include <iostream>
#include <string>

using namespace std;

int main()
{
    
    
    string ans;
    ans += '0';
    ans += '5';
    cout<<ans;
    return 0;
}
//运行结果
05

该段代码首先定义了一个string ans,之后,先是让ans 加上字符‘0’,再让ans 加上字符’5’,之后打印了ans,运行结果确实是和想象的是一致的。
但是下面的示例就是错误的

#include <iostream>
#include <string>

using namespace std;

int main()
{
    
    
    string ans;
    ans += '0' + '5';
    cout<<ans;
    return 0;
}
//运行结果
e

可以看到,该段代码在一行中让ans 加了‘0’+‘5’,运行结果是‘e’,这是因为,字符’0’的ASC码值为48,字符‘5’的ASC码值为53,所以’0’ + '5’其实是101,而字符‘e’的ASC码值恰好为101。
故与想象的是有很大的差距的。
可以这样使用

#include <iostream>
#include <string>

using namespace std;

int main()
{
    
    
    string ans;
    ans += '0' + to_string(5);//注意点
    cout<<ans;
    return 0;
}
//运行结果
05

在“注意点”中,使用to_string()函数将5转为了string,之后使用string的+操作,将‘0’加到字符串“5”,所以,ans 的+=操作是两个字符串的加法。

总结

两个字符常量或者两个字符变量或者是字符常量与字符变量之间的加法,是使用ASC码值的相加的。十分容易出现意想不到的错误。

猜你喜欢

转载自blog.csdn.net/weixin_44321570/article/details/113942184