如何在C++中将整数转换为字符串?

2110
如何在C++中将int转换为等效的string?我知道两种方法。还有其他方法吗?
(1)
int a = 10;
char *intStr = itoa(a);
string str = string(intStr);

(2)

int a = 10;
stringstream ss;
ss << a;
string str = ss.str();

6
我认为你给出的两种方法都是不错的解决方案。这取决于需要使用方法的上下文。例如,如果您已经在使用流(stream),比如读写文件,则第二种方法是最好的选择。如果您需要将整数转换为字符串以传递给函数参数,则 itoa 可能是一种简单的方式。但是大多数情况下,整数到字符串的转换发生在处理文件时,所以流是合适的。 - Charles Brunet
63
选项1对你来说怎么可能有效?据我了解,itoa()需要三个参数。 - arkon
3
itoa 方法比流等效方法更快。此外,使用 itoa 方法可以重复使用字符串缓冲区(如果您经常生成字符串,则避免堆分配。例如,对于某些快速更新的数值输出)。或者,您可以生成自定义 streambuf 以减少一些分配开销等。首先构建流也不是低成本的事情。 - Pete
7
@Pete: 一旦你开始担心哪一个更快,你可以看一下这个网址:https://dev59.com/TG855IYBdhLWcg3wbjrO - Ben Voigt
25
请注意,itoa()不是标准的一部分,因此使用它会使您的代码不可移植,因为并非所有编译器都支持它。对于Linux而言,除非您使用的不是GCC,否则您肯定不行,因为GCC不支持此函数。如果您有C++0x,请按@Matthieu在他的答案中建议的去做。如果不是这种情况,请使用stringstream,因为它是一个得到广泛支持的特性,您的代码应该与每个C++编译器兼容。作为替代方案,您总是可以使用sprintf()。 - rbaleksandar
显示剩余2条评论
32个回答

-3
namespace std
{
    inline string to_string(int _Val)
    {   // Convert long long to string
        char _Buf[2 * _MAX_INT_DIG];
        snprintf(_Buf, "%d", _Val);
        return (string(_Buf));
    }
}

现在您可以使用to_string(5)


11
虽然这个解决方案能够工作,但极不推荐使用!以下划线和大写字母开头的名称是为编译器保留的,你永远不应该使用它们。将函数注入到 std 命名空间中也是不应该做的事情。此外,似乎 _MAX_INT_DIG 不是标准宏,因此如果定义错误,这段代码很可能会引起未定义行为。-1 - iFreilicht
7
_MAX_INT_DIG 是什么,为什么要将它加倍? - paulm

-4

我认为使用 stringstream 是相当容易的:

 string toString(int n)
 {
     stringstream ss(n);
     ss << n;
     return ss.str();
 }

 int main()
 {
    int n;
    cin >> n;
    cout << toString(n) << endl;
    return 0;
 }

1
这在问题中已经提到了,不幸的是它非常慢。 - Kotauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接