在C++中将int转换为等价字符串的最简单方法是什么?我知道两种方法。有没有更简单的方法?

(1)

int a = 10;
char *intStr = itoa(a);
string str = string(intStr);

(2)

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

当前回答

如果使用MFC,可以使用CString:

int a = 10;
CString strA;
strA.Format("%d", a);

其他回答

使用字符串流进行数字转换是危险的!

请参阅std::ostream::operator<<,其中告诉operator<插入格式化输出。

根据您当前的语言环境,大于三位数的整数可以转换为四位数的字符串,并添加额外的千位分隔符。

例如,int=1000可以转换为字符串1.001。这可能会使比较操作根本不起作用。

所以我强烈建议使用std::to_string方法。它更容易,做你期望的事情。

从std::到_string:

C++17提供std::to_chars作为一种更高性能的独立于语言环境的替代方案。

电流C++

从C++11开始,有一个std::to_string函数为整数类型重载,因此可以使用如下代码:

int a = 20;
std::string s = std::to_string(a);
// or: auto s = std::to_string(a);

标准将其定义为等同于使用sprintf(使用与提供的对象类型匹配的转换说明符,例如%d表示int)将其转换为足够大小的缓冲区,然后创建该缓冲区内容的std::字符串。

旧C++

对于较旧的(早于C++11)编译器,可能最常见的简单方法是将第二个选择打包到一个通常名为lexical_cast的模板中,例如Boost中的模板,因此代码如下:

int a = 10;
string s = lexical_cast<string>(a);

这样做的一个好处是它也支持其他类型的转换(例如,在相反的方向上也可以)。

还要注意,虽然Boost lexical_cast一开始只是写入字符串流,然后从流中提取,但现在它有了一些附加功能。首先,添加了相当多类型的专门化,因此对于许多常见类型,它比使用字符串流快得多。第二,它现在检查结果,因此(例如)如果您从字符串转换为int,如果字符串包含无法转换为int的内容(例如,1234将成功,但123abc将抛出),它可以抛出异常。

这对我有用-

我的代码:

#include <iostream>
using namespace std;

int main()
{
    int n = 32;
    string s = to_string(n);
    cout << "string: " + s  << endl;
    return 0;
}

这是另一个简单的方法

char str[100];
sprintf(str, "%d", 101);
string s = str;

sprintf是一种众所周知的将任何数据插入所需格式的字符串的方法。

您可以将char*数组转换为字符串,如第三行所示。

如果使用MFC,可以使用CString:

int a = 10;
CString strA;
strA.Format("%d", a);