将一个int转换为std :: string

什么是最短的方式,最好是内联,将int转换为string? 使用stl和boost的答案将受到欢迎。

你可以在C ++ 11中使用std :: to_string

 int i = 3; std::string str = std::to_string(i); 
 #include <sstream> #include <string> const int i = 3; std::ostringstream s; s << i; const std::string i_as_string(s.str()); 

boost::lexical_cast<std::string>(yourint) from boost/lexical_cast.hpp

对于所有支持std :: ostream的工作都是如此,但并不像itoa那么快

它甚至似乎比stringstream或scanf更快:

那么众所周知的做法是使用stream操作符:

 #include <sstream> std::ostringstream s; int i; s << i; std::string converted(s.str()); 

当然,你可以使用模板函数^^来推广它的任何types

 #include <sstream> template<typename T> std::string toString(const T& value) { std::ostringstream oss; oss << value; return oss.str(); } 

非标准function,但在大多数通用编译器上实现:

 int input = MY_VALUE; char buffer[100] = {0}; int number_base = 10; std::string output = itoa(input, buffer, number_base); 

更新

C ++ 11引入了几个std::to_string重载(注意默认为10)。

如果你不能在C ++ 11中使用std::to_string ,你可以在cppreference.com上定义它:

std::string to_string( int value )将带符号的十进制整数转换为与std::sprintf(buf, "%d", value)为足够大的buf所产生的内容相同的string。

履行

 #include <cstdio> #include <string> #include <cassert> std::string to_string( int x ) { int length = snprintf( NULL, 0, "%d", x ); assert( length >= 0 ); char* buf = new char[length + 1]; snprintf( buf, length + 1, "%d", x ); std::string str( buf ); delete[] buf; return str; } 

你可以做更多的事情。 只需使用"%g"将float或double转换为string,使用"%x"将int转换为hex表示等等。

下面的macros不像一次性使用ostringstreamboost::lexical_cast那么紧凑。

但是,如果您需要在代码中反复使用string转换,则此macros比使用直接处理stringstream或每次显式转换更为优雅。

它也是非常灵活的,因为它转换了operator<<()支持的所有东西 ,即使是组合在一起。

定义:

 #include <sstream> #define SSTR( x ) dynamic_cast< std::ostringstream & >( \ ( std::ostringstream() << std::dec << x ) ).str() 

说明:

std::dec是一个无副作用的方法,使匿名ostringstream成为一个通用的ostream所以operator<<()函数查找适用于所有types。 (如果第一个参数是一个指针types,则会遇到麻烦。)

dynamic_cast将types返回到ostringstream所以你可以调用str()

使用:

 #include <string> int main() { int i = 42; std::string s1 = SSTR( i ); int x = 23; std::string s2 = SSTR( "i: " << i << ", x: " << x ); return 0; } 

你可能会在你的项目中包含itoa的实现。
itoa修改为使用std :: string: http : //www.strudel.org.uk/itoa/

假设我有integer = 0123456789101112 。 现在,这个整数可以被stringstream类转换成一个string。

这里是C ++中的代码:

  #include <bits/stdc++.h> using namespace std; int main() { int n,i; string s; stringstream st; for(i=0;i<=12;i++) { st<<i; } s=st.str(); cout<<s<<endl; return 0; }