我保留的傳統代碼將文本收集到std::ostream
中。我想將其轉換爲std::string
。將std :: ostream轉換爲std :: string
我發現轉換std::sstringstream
,std::ostringstream
等,以std::string
但沒有明確std::ostream
到std::string
的例子。
我該怎麼做? (古C++ 98只,無升壓請)
我保留的傳統代碼將文本收集到std::ostream
中。我想將其轉換爲std::string
。將std :: ostream轉換爲std :: string
我發現轉換std::sstringstream
,std::ostringstream
等,以std::string
但沒有明確std::ostream
到std::string
的例子。
我該怎麼做? (古C++ 98只,無升壓請)
如果你有AA 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
ostream
是ofstream
或iostream
,最有可能清除其緩衝區,以便您可能無法提取上述建議的全部內容。我不認爲這有效;你鏈接到的帖子引用輸入流的'rdbuf'。 –
@ M.M:剛剛測試過(見現場演示添加到我的文章中),它在'ostream'實際上是一個'stringstream'時有用,所以我不明白爲什麼它不會與其他人一起工作(如'ofstream')。 – jpo38
stringstreams總是將內容保存在內存中,而ofstreams不會,我希望他們在寫入當前行或其他內容後清除它們的緩衝區。 –
你不能「收集」任何東西[[std :: ostream']](http://en.cppreference.com/w/cpp/io/basic_ostream),它是一個基類,它的引用一個傳遞,並且引用某處必須引用一個實際的可實例化的輸出流。因此,請按照調用鏈查看您的'std :: ostream'引用實際引用了什麼,如果它是'std :: ostringstream',那麼您可以輕鬆地從中提取數據。如果它是別的東西,那麼你運氣不好,需要使用別的東西來獲得輸出(可能會添加並行寫入* actual *'std :: ostringstream')。 –
謝謝!這解釋了很多事情。 – Danny