Stringstream экстракт целое число - PullRequest
8 голосов
/ 12 февраля 2009

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

10 голосов
/ 12 февраля 2009

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

ss.clear();
ss.str(Tokens[0]);
8 голосов
/ 12 февраля 2009

Почему вы читаете в переменную 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);
}
6 голосов
/ 12 февраля 2009

Необходимо сбросить все флаги состояния (eofbit) и привести поток в хорошее состояние (goodbit):

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

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

3 голосов
/ 12 февраля 2009

STL! : P

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