istringstream 的状态判断问题
- C/C++ code
int main(){ string str = "A B C D E F"; istringstream ss(str); string tmpstr; while ( ss ) { ss >> tmpstr; cout << tmpstr << endl; }}A
B
C
D
E
F
F
即重复了输出最后一个,但是改为 while ( !ss.eof() ) 就正常了,这是为什么呢?
[解决办法]
while (ss >> tmpstr )
{
[解决办法]
while ( ss )
{
ss >> tmpstr;
cout << tmpstr << endl;
}
当流读取了最后一个字串F 时候,流得状态还是 ok的.当下一次读取的时候,读取失败,但tmpstr的内容还是会输出出来.所以最后的字串会输出两次.一般的写法如楼上.先读在判断流状态.
ss>>tmpstr 返回的是ss.