2014-08-28 72 views
0

我有一個string"ABC DEF "在末尾有空格。我想將它轉換成像{"ABC" "DEF"}字符串vector,所以我用一個stringstream將字符串拆分爲單詞向量

string s = "ABC DEF "; 
stringstream ss(s); 
string tmpstr; 
vector<string> vpos; 
while (ss.good()) 
{ 
    ss >> tmpstr; 
    vpos.push_back(tmpstr); 
} 

但是,結果vpos{"ABC" "DEF" "DEF"}。爲什麼最後一個單詞會被複制到矢量中?什麼是正確的代碼,如果使用stringstream是必需的?

+0

@CaptainObvlious:不是,不。 – 2014-08-28 03:06:41

+0

基本邏輯:'ss.good()'不能告訴未來! – 2014-08-28 03:07:11

+0

@LightnessRacesinOrbit - 非常正確。收起投票。 – 2014-08-28 04:40:37

回答

4

ss.good()只告訴你目前爲止情況是否良好。它不會告訴你,你讀的下一件事情會很好。

使用

while (ss >> tmpstr) vpos.push_back(tmpstr); 

現在你正在閱讀tmpstr先檢查流的狀態。這相當於這樣:

for (;;) { 
    istream &result = ss >> tmpstr; 
    if (!result) break; 
    vpos.push_back(tmpstr); 
} 
+0

感謝您的回答。我發現返回值是'istream'類型,所以我寫了'while(istream obj = ss >> tmpstr)',但它似乎是錯誤的。那麼'ss >> tmpstr'背後的語法是什麼? – 2014-08-28 02:38:12

+0

感謝您的解釋!我學到了很多。 – 2014-08-28 02:43:56