76

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

过去,我曾经stringstream做过转换,这有点麻烦。我知道 C 方法是做 a sprintf,但我更愿意做一个类型安全(er)的 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);

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

有关的:

替代 itoa() 将整数转换为字符串 C++?

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 回答