将 std::ostream 转换为 std::string

Convert std::ostream to std::string

我维护的遗留代码将文本收集到 std::ostream 中。我想将其转换为 std::string.

我找到了将 std::sstringstreamstd::ostringstream 等转换为 std::string 但未明确将 std::ostream 转换为 std::string 的示例。

我该怎么做? (仅限古代 C++ 98,请不要提升)

试试这个

 std::ostringstream stream;
 stream << "Some Text";
 std::string str =  stream.str();
  • 如果您有 stringstreamostreamstring、对象或引用,只需使用完全符合您要求的 ostringstream::str() 方法:提取 string。但是您知道这一点,并且您显然有一个 ostream 对象,而不是 stringstreamostreamstring

  • 如果您的 ostream 引用实际上是 ostringstreamstringstream,请使用 ostream::rdbuf 获取 streambuf,然后使用 this post 查看如何提取 string.

示例:

#include <iostream>
#include <sstream>

std::string toString( std::ostream& str )
{
    std::ostringstream ss;
    ss << str.rdbuf();
    return ss.str();
}

int main() {

    std::stringstream str;
    str << "Hello";

    std::string converted = toString( str );

    std::cout << converted;

    return 0;
}

现场演示:http://cpp.sh/6z6c

  • 最后,正如 M.M 评论的那样,如果您的 ostreamofstreamiostream,很可能它会清除其缓冲区,因此您可能无法按照上面的建议提取全部内容。