Извлечение целых чисел

Почему мне не удается извлечь целочисленное значение в переменную 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
}

Ответ 1

Когда поток извлекает последний из 3-х цифр "1 2 3", будет установлено состояние eof. Член str() не очищается, вам нужно сделать это самостоятельно. Измените свой код на:

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

Ответ 2

Почему вы читаете переменную 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);
}

Ответ 3

Вы должны reset все флаги состояния (eofbit) и привести поток в хорошее состояние (goodbit):

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

Причина в том, что если вы продолжаете извлечение до конца, вы попадете в конец, и флаг eof будет установлен в этом потоке. После этого операции чтения будут отменены, и вы должны снова очистить этот флаг. В любом случае, после очистки и сброса строки, вы можете продолжить извлечение целых чисел.

Ответ 4

STL!: P

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