Pregunta

¿Por qué no logro extraer un valor entero en la variable 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
}
¿Fue útil?

Solución

Cuando la corriente extrae el último de los 3 digist "1 2 3" se establecerá el estado eof. Esto no se borra por el miembro str (), que tiene que hacer usted mismo. Cambiar el código para:

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

Otros consejos

¿Por qué estás leyendo en una variable temporal string?

Puede acaba de leer desde el stringstream en un int ...

int main()
{
    string Digits("1 2 3");
    stringstream ss(Digits);
    int Temp;
    vector<int> Tokens;

    while(ss >> Temp)
        Tokens.push_back(Temp);
}

Hay que restablecer todos los indicadores de estado (eofbit) y traer la corriente en un buen estado (goodbit):

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

La razón es que si se mantiene la extracción hasta el final, se alcanzó el final, y la bandera EF se encuentra en esa corriente. Después de eso, las operaciones de lectura serán cancelados y hay que aclarar que la bandera de nuevo. De todos modos, después de limpiar y restablecer la cadena, a continuación, puede ir en la extracción de los números enteros.

STL! : P

stringstream ss("1 2 3");
vector<int> Tokens;
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(Tokens));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top