obtener la lista de los números de la entrada estándar y tokenize ellas
-
16-09-2019 - |
Pregunta
¿Cómo puedo obtener una lista de números de usuario y luego tokenize ellos.
Esto es lo que tengo pero no recibe nada, excepto para el primer número:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string line = "";
cin >> line;
stringstream lineStream(line);
int i;
vector<int> values;
while (lineStream >> i)
values.push_back(i);
for(int i=0; i<values.size(); i++)
cout << values[i] << endl;
system("PAUSE");
return 0;
}
Artículos Relacionados: Read
C ++, al pasar de cadena a stringstream al vector
Int Tokenizer
Solución
Creo cin >> roturas en los espacios en blanco, lo que significa que sólo está recibiendo el primer factor registrado.
intento:
getline(cin, line);
Otros consejos
Aquí es probablemente la forma más fácil de leer valores de cin
en un recipiente:
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> values;
std::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(values));
// For symmetry with the question copy back to std::cout
std::copy(
values.begin(),
values.end(),
std::ostream_iterator<int>(std::cout,"\n"));
}
Al igual que Donnie mencionado rompe cin en los espacios en blanco, por lo que pueden sobrellevar esto podemos utilizar un 'getline ()', el siguiente ejemplo funciona muy bien:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string line = "";
::getline(std::cin,line,'\n');
std::stringstream lineStream(line);
int i;
std::vector<int> values;
while (lineStream >> i)
values.push_back(i);
for(int i=0; i<values.size(); i++)
cout << values[i] << endl;
system("PAUSE");
return 0;
}
en la parte superior de principal
string line = "";
getline (cin, line );
stringstream lineStream(line);
Sí, y es la versión de serie de getline, sin la istream uno.
OK: Pavel Minaev tiene la mejor respuesta
.
Pero toda la gente mencionar que rompe cin en el espacio blanco.
Eso es una buena cosa (ya que también ignora los espacios en blanco);
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
int i;
vector<int> values;
// prefer to use std::copy() but this works.
while (std::cin >> i)
{
values.push_back(i);
}
// prefer to use std::copy but this works.
for(vector<int>::const_iterator loop = values.begin();loop != values.end();++loop)
{
cout << *loop << endl;
}
return 0;
}