2009-02-12 62 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));