número entero extracto stringstream
-
22-08-2019 - |
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
}
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));