C++: Parsear entrada separando palabras
Releyendo el libro de Stroustrup, encontré algo que me habría gustado saber tiempo atrás: una forma piola de parsear un stream de entrada separando palabras con whitespace ( 1 whitespace = cualquier cantidad consecutiva de espacios y/o tabs ). Esto se hace con un istream_iterator, así:
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
void main(){
using std::cout;
using std::endl;
// Leemos desde standard input, pero podria ser desde un archivo
std::istream_iterator<std::string> ii( std::cin );
cout << "--->Entrada parseada separando por whitespace:" << endl;
// Supongamos que dejamos de leer cuando leemos el string "FIN"
std::vector<string> palabras;
while ( *ii != "FIN" ){
cout << *ii << endl;
palabras.push_back(*ii);
ii++;
}
// Ordenamos las palabras
cout << "Palabras ordenadas:" << endl;
sort( palabras.begin(), palabras.end() );
for( unsigned int i = 0; i < palabras.size(); i++ )
cout << palabras[i] << endl;
}
Comments
Post a Comment