2009-02-12 63 views
8

爲什麼我無法將整數值提取到Num變量中?Stringstream提取整數

#include <sstream> 
#include <vector> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string Digits("1 2 3"); 
    stringstream ss(Digits); 
    string Temp; 
    vector<string>Tokens; 

    while(ss >> Temp) 
     Tokens.push_back(Temp); 

    ss.str(Tokens[0]); 

    int Num = 0; 
    ss >> Num; 
    cout << Num; //output: 0 
} 

回答

10

當流中提取的最後3 digist「1 2 3」的EOF狀態將被設置的。這不會被str()成員清除,你需要自己做。將代碼更改爲:

ss.clear(); 
ss.str(Tokens[0]); 
+0

謝謝。有類似的問題,但我只是重建了遊戲的背後。 :( – Muxecoid 2009-02-12 12:38:00

6

您必須重新設置所有狀態標誌(eofbit),並把流進了良好的狀態(goodbit):

ss.clear(); // clear status flags 
ss.str(Tokens[0]); 

的原因是,如果你繼續提取,直至最後,你會擊中結尾,並且eof標誌將被設置在該流上。之後,閱讀操作將被取消,您必須再次清除該標誌。無論如何,在清除並重置字符串之後,您可以繼續提取整數。

8

爲什麼你讀到temp string變量?

你可以只從字符串流讀入一個int ...

int main() 
{ 
    string Digits("1 2 3"); 
    stringstream ss(Digits); 
    int Temp; 
    vector<int> Tokens; 

    while(ss >> Temp) 
     Tokens.push_back(Temp); 
} 
2

STL! :P

stringstream ss("1 2 3"); 
vector<int> Tokens; 
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(Tokens));