将 std::ostream 转换为 std::string
Convert std::ostream to std::string
我维护的遗留代码将文本收集到 std::ostream
中。我想将其转换为 std::string
.
我找到了将 std::sstringstream
、std::ostringstream
等转换为 std::string
但未明确将 std::ostream
转换为 std::string
的示例。
我该怎么做? (仅限古代 C++ 98,请不要提升)
试试这个
std::ostringstream stream;
stream << "Some Text";
std::string str = stream.str();
如果您有 stringstream
或 ostreamstring
、对象或引用,只需使用完全符合您要求的 ostringstream::str()
方法:提取 string
。但是您知道这一点,并且您显然有一个 ostream
对象,而不是 stringstream
或 ostreamstring
。
如果您的 ostream 引用实际上是 ostringstream
或 stringstream
,请使用 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 评论的那样,如果您的
ostream
是 ofstream
或 iostream
,很可能它会清除其缓冲区,因此您可能无法按照上面的建议提取全部内容。
我维护的遗留代码将文本收集到 std::ostream
中。我想将其转换为 std::string
.
我找到了将 std::sstringstream
、std::ostringstream
等转换为 std::string
但未明确将 std::ostream
转换为 std::string
的示例。
我该怎么做? (仅限古代 C++ 98,请不要提升)
试试这个
std::ostringstream stream;
stream << "Some Text";
std::string str = stream.str();
如果您有
stringstream
或ostreamstring
、对象或引用,只需使用完全符合您要求的ostringstream::str()
方法:提取string
。但是您知道这一点,并且您显然有一个ostream
对象,而不是stringstream
或ostreamstring
。如果您的 ostream 引用实际上是
ostringstream
或stringstream
,请使用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 评论的那样,如果您的
ostream
是ofstream
或iostream
,很可能它会清除其缓冲区,因此您可能无法按照上面的建议提取全部内容。