web-dev-qa-db-ja.com

intをstd :: stringに変換する

Intを文字列に変換する最短の方法、できればインライン化可能な方法は何ですか? stlとboostを使用した回答を歓迎します。

118
Amir Rachum

C++ 11では std :: to_string を使用できます

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

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

Std :: ostreamがサポートされているすべてのものが動作しますが、たとえばitoaほど高速ではありません

Stringstreamやscanfよりも高速であるようにさえ見えます:

36
ltjax

よく知られている方法は、ストリーム演算子を使用することです:

#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();
}
30
neuro

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進表現に変換するなどします。

14
user2622016

非標準関数ですが、ほとんどの一般的なコンパイラに実装されています:

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であることに注意してください)。

13
Zac Howland

次のマクロは、使い捨ての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;
}
8
DevSolar

プロジェクトにitoaの実装を含めることができます。
これは、std :: stringで動作するように変更されたitoaです。 http://www.strudel.org.uk/itoa/

0
ArtemGr

この関数を使用して、std::stringを含めた後、int<sstream>に変換できます。

#include <sstream>

string IntToString (int a)
{
    stringstream temp;
    temp<<a;
    return temp.str();
}
0
dodo