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.
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 ...