问题:我有一个整数;这个整数需要转换为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);

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

  

相关:

     

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

有帮助吗?

解决方案

现在在c ++ 11中我们有

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

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

其他提示

如前所述,我建议使用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 &){
 ...
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top