Ответ 1
Когда поток извлекает последний из 3-х цифр "1 2 3", будет установлено состояние eof. Член str() не очищается, вам нужно сделать это самостоятельно. Измените свой код на:
ss.clear();
ss.str(Tokens[0]);
Почему мне не удается извлечь целочисленное значение в переменную Num
?
#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
}
Когда поток извлекает последний из 3-х цифр "1 2 3", будет установлено состояние eof. Член str() не очищается, вам нужно сделать это самостоятельно. Измените свой код на:
ss.clear();
ss.str(Tokens[0]);
Почему вы читаете переменную temp string
?
Вы можете просто прочитать из stringstream в int...
int main()
{
string Digits("1 2 3");
stringstream ss(Digits);
int Temp;
vector<int> Tokens;
while(ss >> Temp)
Tokens.push_back(Temp);
}
Вы должны reset все флаги состояния (eofbit) и привести поток в хорошее состояние (goodbit):
ss.clear(); // clear status flags
ss.str(Tokens[0]);
Причина в том, что если вы продолжаете извлечение до конца, вы попадете в конец, и флаг eof будет установлен в этом потоке. После этого операции чтения будут отменены, и вы должны снова очистить этот флаг. В любом случае, после очистки и сброса строки, вы можете продолжить извлечение целых чисел.
STL!: P
stringstream ss("1 2 3");
vector<int> Tokens;
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(Tokens));