在c ++中将整数转换为字符串

时间:2016-06-15 14:51:57

标签: c++ string

这是我编写的将整数转换为字符串的代码。

#include <iostream>
using namespace std;
int main()
{
    string s;
    int b=5;
    s.push_back((char)b);
    cout<<s<<endl;
}

我预计输出为5,但它给了我空白。

我知道还有另一种方法可以使用stringstream,但我想知道这个方法有什么问题?

6 个答案:

答案 0 :(得分:6)

数字的字符代码不等于字符在典型系统中表示的整数。

小数字的字符代码是连续的(N3337 2.3字符集,第3段),因此您可以添加'0'将一位数字转换为字符。

#include <iostream>
using namespace std;
int main()
{
    string s;
    int b=5;
    s.push_back((char)(b + '0'));
    cout<<s<<endl;
}

答案 1 :(得分:4)

您将整数 5 解释为字符。在ASCII编码中,当您查找here时, 5 查询 控制字符

另一方面,字符 5 由十进制数53表示。

答案 2 :(得分:2)

您的代码中的问题是您将整数5转换为ASCII(=&gt; ENQ ASCII代码,这不是“可打印”)。 要正确地将其转换为ASCII,您必须添加ASCII代码'0'(48),所以:

std::stringstream ss; //from <sstream>
ss << 5;
std::string s = ss.str ();

但是,要将整数转换为std :: string,请使用:

template <typename T>
std::string toString (T arg)
{
    std::stringstream ss;
    ss << arg;
    return ss.str ();
}

我总是在我的项目中使用这个辅助函数:

{{1}}

答案 3 :(得分:1)

正如其他人所说,你不能像你一样将整数转换为字符串。

恕我直言,最好的方法是使用C ++ 11方法std::to_string

您的示例将转换为:

using namespace std;
int main()
{
    string s;
    int b=5;
    s = to_string(b);
    cout<<s<<endl;
}

答案 4 :(得分:0)

此外,您可以使用stringstream, std :: to_string在GCC上对我不起作用

答案 5 :(得分:0)

如果我们在2016年从零开始编写C ++,也许我们可以做到这一点。然而,因为它选择(大部分)向后兼容C等相当低级别的语言,'char'实际上只是一个数字,字符串/打印算法解释为一个字符 - 但大多数语言不是&#39对待特殊。包括演员。因此,通过执行(char),您只需将32位有符号数(int)转换为8位有符号数(char)。

然后在打印时将其解释为字符,因为打印功能会对其进行特殊处理。但它打印的值不是'5'。通信是常规的,完全是随意的;第一个数字保留给特殊代码,这些代码现在可能已经过时了。正如Hoffman所指出的,位值5Enquiry的代码(无论它意味着什么),而要打印'5',字符必须包含值53。要打印适当的空间,您需要输入32。除了有人认为这与几十年前的任何事情一样好以外,没有任何意义,而且会议陷入困境。

如果您需要了解其他字符和值,您需要的是一个&#34; ASCII表&#34;。只是google它,你会发现很多。

你会注意到同一案件的数字和字母按照你期望的顺序彼此相邻,所以至少有一些逻辑。但要注意,它通常不直观:例如,大写字母在小写字母之前,所以'A' < 'a'

我想你已经开始明白为什么依靠专用的系统函数为字符串更好了!