Stringstream извлечь целое число

почему я не могу извлечь целое значение в 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
}

4 ответов


когда поток извлекает последний из 3 digist "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);
}

вы должны сбросить все флаги состояния (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));