C++ 整数转字符串的简单函数?

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

然而,我认为这是一个相当“重量级”的实现。

Zan指出调用方式相当不错,但是:

std::string s = t_to_string(my_integer);

无论如何,更好的方式会更好。

相关:

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


在您的示例t_to_string中,我看不出为什么需要模板规范。模板函数可以从其参数类型确定其模板类型。 - Zan Lynx
@Zan:Durp。这就是我发布未编译代码的下场。 - Paul Nathan
13
以下是一些示例:http://www.codeproject.com/KB/recipes/Tokenizer.aspx,它们非常高效且优雅。 - Matthieu N.
@Beh: 这个库比一个简单的t_to_string()函数要重得多。它实际上看起来是一个非常好的库,但我不想为了只做一个t_to_string()函数而导入整个库。 - Paul Nathan
3个回答

136

非常棒。有函数描述的标准页面链接吗? - Paul Nathan
6
编译器出现错误 -- "std::to_string: 调用重载函数不明确" - JMarsch
8
我会将其改为“最后,我们有了......”。 - Sam Goldberg

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 &){
 ...
}

22

实际上,标准中并没有这个功能。有些实现提供了非标准的itoa()函数,你可以查找Boost的lexical_cast函数,但如果你坚持使用标准,基本上只能选择stringstream和sprintf()(如果有的话则使用snprintf())。


2
很好,这个问题已经被解决了,请参见Schaub的回答 - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接