Intを文字列に変換する最短の方法、できればインライン化可能な方法は何ですか? 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.hpp
のboost::lexical_cast<std::string>(yourint)
Std :: ostreamがサポートされているすべてのものが動作しますが、たとえばitoa
ほど高速ではありません
Stringstreamやscanfよりも高速であるようにさえ見えます:
よく知られている方法は、ストリーム演算子を使用することです:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
もちろん、テンプレート関数を使用して任意のタイプに一般化できます^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
C++ 11で std::to_string
を使用できない場合は、cppreference.comで定義されているとおりに記述できます。
std::string to_string( int value )
符号付き10進整数を、std::sprintf(buf, "%d", value)
が十分に大きいbufに対して生成するものと同じ内容の文字列に変換します。
実装
#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を文字列に変換し、"%x"
を使用してintを16進表現に変換するなどします。
非標準関数ですが、ほとんどの一般的なコンパイラに実装されています:
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
オーバーロードを導入しました(デフォルトはbase-10であることに注意してください)。
次のマクロは、使い捨てのostringstream
またはboost::lexical_cast
ほどコンパクトではありません。
ただし、コードで繰り返し文字列への変換が必要な場合、このマクロは、文字列ストリームを直接処理したり、毎回明示的にキャストしたりするよりもエレガントに使用できます。
また、operator<<()
でサポートされるeverythingを変換するため、very汎用性があります。組み合わせても。
定義:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
説明:
std::dec
は、匿名のostringstream
を汎用のostream
にする副作用のない方法であるため、operator<<()
関数の検索はすべてのタイプで正しく機能します。 (最初の引数がポインタ型の場合、そうでなければ問題が発生します。)
dynamic_cast
は型を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の実装を含めることができます。
これは、std :: stringで動作するように変更されたitoaです。 http://www.strudel.org.uk/itoa/
この関数を使用して、std::string
を含めた後、int
を<sstream>
に変換できます。
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}