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

时间:2017-03-18 07:19:17

标签: c++ std

我维护的旧版代码会将文本收集到std::ostream中。我想将其转换为std::string

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

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

2 个答案:

答案 0 :(得分:3)

  • 如果您有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

  • 最后,正如MM评论的那样,如果您的ostreamofstreamiostream,则很可能会清除其缓冲区,因此您可能无法将完整内容提取为上面提出的建议。

答案 1 :(得分:0)

试试这个

 std::ostringstream stream;
 stream << "Some Text";
 std::string str =  stream.str();