C++中整数转字符串的转换/整数-字符串连接 - 更紧凑的解决方案?

9
如何将整型转换为字符串在互联网上已经有很多答案了... 但是,我正在寻找最紧凑的“C++方式”来实现这个目标。
既然可以使用重载的+运算符来连接字符串,那么最好能够做一些类似于Python中x =(stringVariable + str(intVariable))的操作,但我不知道在C++中是否有规范的方法来做到这一点。
我看到的最常见的解决方法有:
stringstream:如果可能的话,最好不要用3行代码(声明、写入流、转换为字符串)只是为了连接一些字母和数字。
itoa:这个方法可行,但我正在寻找一个规范的C++解决方案。另外,我认为itoa在技术上是非标准的,虽然我可能错了。
boost格式/ boost词法转换:这个方法也可行,但在纯C++中没有做这件事的东西吗?

3
请注意,stringstreams 实际上可以完成这项任务。提示:不要创造(非)问题。 :) - Kos
1
@Kos 这只是我的小烦恼,但是这里应该用 std::ostringstream - James Kanze
@JamesKanze:如果真的要挑剔的话,转换的实际工作是在输出流的适当operator<<中完成的。 - PlasmaHH
4个回答

17
#include <string>

将字符串转换为整数:int n = std::stoi(s);

将整数转换为字符串:std::string s = std::to_string(n);


酷,又是一个我还不知道的新功能(值得一提的是,它正式发布还不到1年,有些编译器或编译器用户可能还没有跟上!)。 - Kos
@Kos:官方上说它已经3.5个月大了 ;) (2011-09-01) - PlasmaHH
C++11让我的代码更易于维护。希望早期采用者不会给我带来麻烦(如编译器支持、公司编码标准等)。 - daj
@daj:至少随着时间的推移,它会越来越少地咬你! - Kerrek SB

4

C++11有std::to_string函数,但在C++03中没有"一次函数调用解决方案"。此外,boost::lexical_cast(虽然专门为某些情况进行了优化)和std::to_string最终都会调用operator<<(std::ostream&,T)来进行转换。这全部都是为了能够通用地处理事物,当已经有了op<<时,为什么不重用它来创建一个字符串表示呢?


2

stringVariable + boost::lexical_cast<std::string>( intVariable )可以完成任务,但我不确定这是否是一个好主意。即使在Python中,像'{}{:6f}'.format( stringVariable, intVariable )这样的方式更加常见。


0

有什么问题需要转换3行代码吗?如果您需要随时使用相同类型的连接,请将其放入函数中即可完成。这比使用奇怪的解决方案要好。


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