将一个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不像一次性使用ostringstream
或boost::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; }