c++ - streamstring - stringstream用法




你如何清除一個stringstream變量? (6)

我已經嘗試了幾件事,

std::stringstream m;
m.empty();
m.clear();

兩者都不起作用。


對於所有的標準庫類型,成員函數empty()是一個查詢,而不是一個命令,即它意味著“你是空的嗎?” 不是“請扔掉你的內容”。

clear()成員函數從ios繼承,用於清除流的錯誤狀態,例如,如果文件流的錯誤狀態設置為eofbit (文件結束),則調用clear()將設置錯誤狀態返回goodbit (沒有錯誤)。

要清除stringstream的內容,請使用:

m.str("");

是正確的,雖然使用:

m.str(std::string());

在技​​術上更高效,因為你避免調用帶const char*std::string構造const char* 。 但是現在任何編譯器都應該能夠在這兩種情況下生成相同的代碼 - 所以我只會選擇更具可讀性的代碼。


您可以清除錯誤狀態並在一行中清空strignstream

std::stringstream().swap(m); // swap m with a default constructed stringstream

這有效地將m重置為默認構造狀態


我的2美分:

這似乎在xcode和dev-c ++中適用於我,我有一個菜單形式的程序,如果按照用戶的請求迭代執行,將填充一個streamtring變量,該變量在第一次代碼會運行但不會在用戶下次運行相同的代碼時清除字符串流。 但是在填充字符串變量之前,下面的兩行代碼最終每次清理了stringstream變量。 (2小時的試驗和錯誤和谷歌搜索),順便說一句,使用每一行自己不會做的伎倆。

//clear the stringstream variable

sstm.str("");
sstm.clear();

//fill up the streamstream variable
sstm << "crap" << "morecrap";

無論編譯器如何,這應該是最可靠的方法:

m=std::stringstream();

這是一個概念問題。

Stringstream是一個流,所以它的迭代器是前向的,不能返回。 在輸出串流中,您需要使用flush()來重新初始化它,就像在其他輸出流中一樣。


m.str("");

似乎工作。





stringstream