在 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();
C ++ 11 引入了std::stoi
(以及每种数字类型的变体)和std::to_string
,它们是 C atoi
和itoa
的对应物,但用std::string
。
#include <string>
std::string s = std::to_string(42);
因此,这是我能想到的最短路。您甚至可以使用auto
关键字省略命名类型:
auto s = std::to_string(42);
注意:参见[string.conversions] ( n3242 中的 21.5 )
几年后,与 @ v.oddou 进行了讨论,C ++ 17 终于提供了一种方法来完成最初基于宏的类型无关的解决方案(保留在下面) 而不会经历宏观丑陋。
// variadic template
template < typename... Args >
std::string sstr( Args &&... args )
{
std::ostringstream sstr;
// fold expression
( sstr << std::dec << ... << args );
return sstr.str();
}
用法:
int i = 42;
std::string s = sstr( "i is: ", i );
puts( sstr( i ).c_str() );
Foo x( 42 );
throw std::runtime_error( sstr( "Foo is '", x, "', i is ", i ) );
原始答案:
由于 “将... 转换为字符串” 是一个反复出现的问题,我总是在我的 C ++ 源代码的中心标题中定义SSTR()宏:
#include <sstream>
#define SSTR( x ) static_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
用法很简单:
int i = 42;
std::string s = SSTR( "i is: " << i );
puts( SSTR( i ).c_str() );
Foo x( 42 );
throw std::runtime_error( SSTR( "Foo is '" << x << "', i is " << i ) );
以上是 C ++ 98 兼容的(如果你不能使用 C ++ 11 std::to_string
),并且不需要任何第三方包含(如果你不能使用 Boost lexical_cast<>
); 这些其他解决方案都有更好的性能。
我通常使用以下方法:
#include <sstream>
template <typename T>
std::string NumberToString ( T Number )
{
std::ostringstream ss;
ss << Number;
return ss.str();
}
这里详细描述。