【问题标题】:How do I convert from stringstream to string in C++?如何在 C++ 中将字符串流转换为字符串?
【发布时间】:2023-03-24 14:19:01
【问题描述】:

如何在 C++ 中将 std::stringstream 转换为 std::string

我需要在字符串流上调用方法吗?

【问题讨论】:

  • 您是否阅读了对上一个问题的回复,其中涵盖了这一点?

标签: c++ string stringstream


【解决方案1】:

​​​​​​​​​

yourStringStream.str()

【讨论】:

    【解决方案2】:

    使用.str()-method

    管理底层字符串对象的内容。

    1) 如同调用 rdbuf()->str() 一样返回底层字符串的副本。

    2) 替换底层字符串的内容,就像调用rdbuf()->str(new_str)...

    备注

    str返回的底层字符串的副本是一个临时对象,会在表达式结束时被销毁,所以直接在str()的结果上调用c_str()(例如auto *ptr = out.str().c_str();)会导致一个悬空指针...

    【讨论】:

      【解决方案3】:

      std::stringstream::str() 是您正在寻找的方法。

      std::stringstream:

      template <class T>
      std::string YourClass::NumericToString(const T & NumericValue)
      {
          std::stringstream ss;
          ss << NumericValue;
          return ss.str();
      }
      

      std::stringstream 是一个更通用的工具。您可以使用更专业的类std::ostringstream 来完成这项特定的工作。

      template <class T>
      std::string YourClass::NumericToString(const T & NumericValue)
      {
          std::ostringstream oss;
          oss << NumericValue;
          return oss.str();
      }
      

      如果您使用std::wstring 类型的字符串,则必须改用std::wstringstreamstd::wostringstream

      template <class T>
      std::wstring YourClass::NumericToString(const T & NumericValue)
      {
          std::wostringstream woss;
          woss << NumericValue;
          return woss.str();
      }
      

      如果您希望字符串的字符类型可以在运行时选择,您还应该将其设为模板变量。

      template <class CharType, class NumType>
      std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
      {
          std::basic_ostringstream<CharType> oss;
          oss << NumericValue;
          return oss.str();
      }
      

      以上所有方法,都必须包含以下两个头文件。

      #include <string>
      #include <sstream>
      

      请注意,上述示例中的参数NumericValue 也可以作为std::stringstd::wstring 传递,分别与std::ostringstreamstd::wostringstream 实例一起使用。 NumericValue 不一定是数值。

      【讨论】:

        【解决方案4】:

        根据记忆,您调用 stringstream::str() 以获取 std::string 值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-19
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 2022-10-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多