当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《c++integer->std::string转换.功能简单?》经验,为你挑选了3个好方法。

问题:我有一个整数; 这个整数需要转换为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
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()的替代方案?

Johannes Sch.. 134

现在在c ++ 11中我们有

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

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



1> Johannes Sch..:

现在在c ++ 11中我们有

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

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


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

2> Mic..:

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

#include 
std::string s = boost::lexical_cast(i);

它还提供一些安全性:

try{
  std::string s = boost::lexical_cast(i);
}catch(boost::bad_lexical_cast &){
 ...
}



3> David Thornl..:

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


这个问题已得到解决,请参阅[Schaub的回答](http://stackoverflow.com/questions/273908/c-integer-stdstring-conversion-simple-function#8362045)
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有