C ++整型>的std :: string转换。 简单的功能? C ++整型>的st

2019-05-13 05:11发布

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

不过,我的概念,这是一个相当“重量级”的实施。

咱注意到调用是相当不错的,但是:

std::string s = t_to_string(my_integer);

无论如何,一个更好的办法是...好。

有关:

替代itoa(),用于转换为串c整数++?

Answer 1:

现在,在C ++ 11我们有

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

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



Answer 2:

就像前面提到的,我会建议提升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 &){
 ...
}


Answer 3:

并非如此,在标准。 有些实现有一个非标准的itoa()函数,你可以看看了Boost的lexical_cast的,但如果你坚持的标准是相当多的stringstream和sprintf()(的snprintf(),如果你有话)之间进行选择。



文章来源: c++ integer->std::string conversion. Simple function?