如何清除stringstream變量?

我已經嘗試了幾件事, ios

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

二者都不起做用。 xcode


#1樓

這些不會在gnu c ++中丟棄stringstream中的數據 函數

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

如下確實爲我清空了字符串流: spa

m.str().clear();

#2樓

不管使用哪一種編譯器,這都應該是最可靠的方法: code

m=std::stringstream();

#3樓

個人2美分: 繼承

這彷佛在xcode和dev-c ++中對我有用,我有一個菜單形式的程序,若是按照用戶的要求迭代執行,它將填充一個stringstream變量,該變量在第一次執行該代碼時就能夠正常工做運行,但不會在用戶下次運行相同的代碼時清除字符串流。 可是下面的兩行代碼最終每次都會在填充字符串變量以前清除stringstream變量。 (2小時的反覆試驗和Google搜索),順便說一句,單獨使用每一行都沒法解決問題。 字符串

//clear the stringstream variable

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

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

#4樓

m.str("");

彷佛有效。 編譯器


#5樓

對於全部標準庫類型,成員函數empty()都是查詢,而不是命令,即表示「您是否爲空?」 而不是「請扔掉您的內容」。 string

clear()成員函數是從ios繼承的,用於清除流的錯誤狀態,例如,若是文件流的錯誤狀態設置爲eofbit (文件結束),則調用clear()將設置錯誤狀態回到goodbit (無錯誤)。 it

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

m.str("");

是正確的,儘管使用:

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

從技術上講效率更高,由於能夠避免調用採用const char*std::string構造const char* 。 可是,現在,任何一種編譯器在兩種狀況下都應該可以生成相同的代碼-所以,我將只使用可讀性更高的代碼。

相關文章
相關標籤/搜索