【问题标题】:integer to string conversion / integer-string concatenation in C++ - more compact solutions?C ++中的整数到字符串转换/整数字符串连接 - 更紧凑的解决方案?
【发布时间】:2012-01-24 12:35:10
【问题描述】:

如何进行整数 -> 字符串转换已在互联网上多次回答......但是,我正在寻找最紧凑的“C++方式”来做到这一点。

由于您可以使用重载的 + 运算符连接字符串,因此最好能够按照 python-ish 的方式做一些事情 x = (stringVariable + str(intVariable)) 连接,但我不知道在 C++ 中是否有规范的方法可以做到这一点。

我看到的最常见的解决方案是:

stringstream:如果可能,最好不要使用 3 行代码(声明、写入流、转换为字符串)来连接一些字母和数字。

itoa:这可行,但我正在寻找一个规范的 C++ 解决方案。另外,我认为 itoa 在技术上是非标准的,尽管我可能是错的。

增强格式/增强词法转换:这也有效,但在 vanilla C++ 中没有任何东西可以完成这项工作吗?

【问题讨论】:

  • 请注意,字符串流实际上可以完成这项工作。提示:不要发明(非)问题。 :)
  • @Kos 只是我的一个小烦恼,但它的std::ostringstream 在这里完成了这项工作。
  • @JamesKanze:真正的挑剔,转换的实际工作是在 ostreams 上的适当 operator<< 中完成的。

标签: c++ string casting int


【解决方案1】:

C++11 有std::to_string,但在 C++03 中没有“单函数调用解决方案”。还有boost::lexical_cast(尽管专门针对某些情况)和std::to_string最终调用operator<<(std::ostream&,T)来获取他们应该转换的任何T。这一切都是为了能够通用地处理事情,当op<< 已经存在时,为什么不重用它来创建字符串表示?

【讨论】:

    【解决方案2】:

    stringVariable + boost::lexical_cast<std::string>( intVariable ) 可以解决问题,但我不确定这是否是个好主意。即使在 Python 中,'{}{:6f}'.format( stringVariable, intVariable ) 之类的东西也会更常见。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        #include <string>
        

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

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

        【讨论】:

        • 酷,又一个我还不知道的新功能(值得一提的是,虽然它正式发布还不到 1 年,一些编译器或编译器用户可能还没有赶上!)。跨度>
        • @Kos: 官方说它是 3.5 个月大;) (2011-09-01)
        • C++11 让我的代码更易于维护。希望作为早期采用者不会回来咬我(在编译器支持、公司编码标准等方面)。
        • @daj:嗯,至少随着时间的推移它会越来越少地咬你!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 2017-10-16
        • 2015-08-10
        • 2014-02-20
        相关资源
        最近更新 更多