在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();
在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();
当前回答
您可以按照Matthieu M.的建议使用C++11中提供的std::to_string:
std::string s = std::to_string(42);
或者,如果性能非常关键(例如,如果进行大量转换),可以使用{fmt}库中的fmt::format_int将整数转换为std::string:
std::string s = fmt::format_int(42).str();
或C字符串:
fmt::format_int f(42);
const char* s = f.c_str();
后者不执行任何动态内存分配,比BoostKarma基准测试上std::to_string的libstdc++实现快70%以上。有关详细信息,请参阅每秒将一亿个整数转换为字符串。
免责声明:我是{fmt}库的作者。
其他回答
使用字符串流进行数字转换是危险的!
请参阅std::ostream::operator<<,其中告诉operator<插入格式化输出。
根据您当前的语言环境,大于三位数的整数可以转换为四位数的字符串,并添加额外的千位分隔符。
例如,int=1000可以转换为字符串1.001。这可能会使比较操作根本不起作用。
所以我强烈建议使用std::to_string方法。它更容易,做你期望的事情。
从std::到_string:
C++17提供std::to_chars作为一种更高性能的独立于语言环境的替代方案。
如果已安装Boost(您应该安装):
#include <boost/lexical_cast.hpp>
int num = 4;
std::string str = boost::lexical_cast<std::string>(num);
我认为使用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;
}
C++11为数字类型引入了std::to_string():
int n = 123; // Input, signed/unsigned short/int/long/long long/float/double
std::string str = std::to_string(n); // Output, std::string
我通常使用以下方法:
#include <sstream>
template <typename T>
std::string NumberToString ( T Number )
{
std::ostringstream ss;
ss << Number;
return ss.str();
}
这里将详细描述。