76

問題: 整数があります。この整数は stl::string 型に変換する必要があります。

以前stringstreamは、変換を行っていましたが、それはちょっと面倒でした。C のやり方で を実行することは知っていますがsprintf、タイプセーフな C++ メソッドを実行したいと思います。

これを行うより良い方法はありますか?

これは、私が過去に使用した stringstream アプローチです。

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

もちろん、これは次のように書き換えることができます。

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

ただし、これはかなり「重い」実装であるという考えがあります。

Zan は、この呼び出しは非常に優れていると述べていますが、次のように述べています。

std::string s = t_to_string(my_integer);

いずれにせよ、より良い方法は...いいでしょう。

関連している:

整数を文字列C++に変換するためのitoa()の代替?

4

3 に答える 3

135

現在、c++11 では

#include <string>
string s = std::to_string(123);

参照へのリンク: http://en.cppreference.com/w/cpp/string/basic_string/to_string

于 2011-12-02T20:12:40.227 に答える
28

前述のように、boost lexical_cast をお勧めします。それはかなり良い構文を持っているだけではありません:

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);

また、ある程度の安全性も提供します。

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}
于 2008-11-07T23:14:53.713 に答える
22

そうではありません、標準では。一部の実装には非標準の itoa() 関数があり、Boost の lexical_cast を調べることができますが、標準に固執する場合は、stringstream と sprintf() (持っている場合は snprintf()) のどちらかを選択することになります。

于 2008-11-07T22:55:24.130 に答える