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

Pau*_*han 76 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;
}
Run Code Online (Sandbox Code Playgroud)

当然,这可以改写如下:

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

    return s;
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为这是一个相当"重量级"的实施.

Zan指出,调用非常好,但是:

std::string s = t_to_string(my_integer);
Run Code Online (Sandbox Code Playgroud)

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

有关:

用于将整数转换为字符串C++的itoa()的替代方案?

Joh*_*itb 134

现在在c ++ 11中我们有

#include <string>
string s = std::to_string(123);
Run Code Online (Sandbox Code Playgroud)

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

  • 我会改为"*最后*,我们......". (8认同)
  • 编译器错误对我来说 - "std :: to_string:对重载函数的模糊调用" (6认同)

Mic*_*Mic 28

如前所述,我建议使用boost lexical_cast.它不仅具有相当好的语法:

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);
Run Code Online (Sandbox Code Playgroud)

它还提供一些安全性:

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ley 22

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

  • 这个问题已得到解决,请参阅[Schaub的回答](http://stackoverflow.com/questions/273908/c-integer-stdstring-conversion-simple-function#8362045) (2认同)