Pregunta

Sé que hay tokenizers cadena, pero no es un "int tokenizer"?

Por ejemplo, quiero dividir la cadena "12 34 46" y tienen:

  

lista [0] = 12

     

lista [1] = 34

     

lista [2] = 46

En particular, me pregunto si Boost :: Tokenizer hace esto. Aunque no he podido encontrar ningún ejemplo que no utilizan cadenas.

¿Fue útil?

Solución

Sí hay: utilizar una corriente, por ejemplo, un stringstream:

stringstream sstr("12 34 46");
int i;
while (sstr >> i)
    list.push_back(i);

Como alternativa, también se puede utilizar algoritmos de STL y / o adaptadores de iterador combinados con los constructores:

vector<int> list = vector<int>(istream_iterator<int>(sstr), istream_iterator<int>());

Otros consejos

El C ++ Cadena Toolkit Library (StrTk) tiene la siguiente solución a su problema:

#include <string>
#include <deque>
#include "strtk.hpp"

int main()
{ 
   {
      std::string data = "12 34 46";
      std::deque<int> int_list;
      strtk::parse(data," ",int_list);
   }

   {
      std::string data = "12.12,34.34|46.46 58.58";
      std::deque<double> double_list;
      strtk::parse(data," ,|",double_list);
   }

   return 0;
}

Más ejemplos se pueden encontrar Aquí

Nota:. El proceso de análisis es EXTREMADAMENTE rápida y eficiente, poniendo stdlib e impulsar soluciones basadas en vergüenza

Lo que estamos buscando es 2 acciones separadas. En primer lugar tokenize la cadena, a continuación, convertir cada ficha a un int.

No estoy seguro de si se puede hacer esto sin usar cuerdas o char * porque hay que pero tanto en número como en espacios mismo conjunto ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top