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

Popular posts from this blog

VB.NET: Raise base class events from a derived class

Apache Kafka - I - High level architecture and concepts

Upgrading Lodash from 3.x to 4.x