Busco una forma sencilla de tokenize entrada de cadena sin usar las bibliotecas no por defecto, como Boost, etc.C++ Tokenize cadena
Por ejemplo, si el usuario introduce forty_five, me gustaría separar cuarenta y cinco; usando _ como el delimitador.
Busco una forma sencilla de tokenize entrada de cadena sin usar las bibliotecas no por defecto, como Boost, etc.C++ Tokenize cadena
Por ejemplo, si el usuario introduce forty_five, me gustaría separar cuarenta y cinco; usando _ como el delimitador.
para convertir una cadena a un vector de fichas (seguro para hilos):
std::vector<std::string> inline StringSplit(const std::string &source, const char *delimiter = " ", bool keepEmpty = false)
{
std::vector<std::string> results;
size_t prev = 0;
size_t next = 0;
while ((next = source.find_first_of(delimiter, prev)) != std::string::npos)
{
if (keepEmpty || (next - prev != 0))
{
results.push_back(source.substr(prev, next - prev));
}
prev = next + 1;
}
if (prev < source.size())
{
results.push_back(source.substr(prev));
}
return results;
}
Puede usar la función strtok_r, pero lea cuidadosamente las páginas man para que comprenda cómo mantiene el estado.
Mira this tutorial, que es con mucho el mejor tutorial sobre tokenización que he encontrado hasta ahora. Abarca las mejores prácticas en la implementación de diferentes métodos que incluyen el uso de getline() y find_first_of() en C std ++, y strtok() en C.
posible duplicado de [¿Cómo tokenize una cadena en C++?] (http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) – Corbin
http://stackoverflow.com/a/236803/240633 – ergosys