c ++ integer-> std :: string转换。功能简单?

时间:2008-11-07 22:52:08

标签: c++ integer stdstring

问题:我有一个整数;这个整数需要转换为stl :: string类型。

在过去,我使用stringstream进行转换,这只是一种麻烦。我知道C方式是做一个sprintf,但我宁愿做一个类型安全的(C)方法。

有更好的方法吗?

以下是我过去使用的字符串流方法:

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);

无论如何,一个更好的方式将是......很好。

  

相关:

     

Alternative to itoa() for converting integer to string C++?

3 个答案:

答案 0 :(得分:133)

现在在c ++ 11中我们有

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

参考链接:http://en.cppreference.com/w/cpp/string/basic_string/to_string

答案 1 :(得分: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 &){
 ...
}

答案 2 :(得分:22)

不是真的,在标准中。有些实现有一个非标准的itoa()函数,你可以查看Boost的lexical_cast,但是如果你坚持使用它,那么它几乎是stringstream和sprintf()之间的选择(snprintf(),如果你有的话)。