Quiero utilizar el Tokenizer de cadena para la cadena CPP, pero todo lo que pude encontrar fue para Char *. ¿Hay algo similar para la cadena CPP?Tokenizer de cadenas para CPP String?
Respuesta
¿Qué quiere decir con "token"? Si es algo separado por cualquier espacio en blanco, los flujos de cadena es lo que quiere:
std::istringstream iss("blah wrxgl bxrcy")
for(;;) {
std::string token;
if(!(iss>>token)) break;
process(token);
}
if(!iss.eof()) report_error();
alternativa, si estás buscando un cierto carácter único de separación, se puede reemplazar con iss>>token
std::getline(iss,token,sep_char)
.
Si es más de un carácter que puede actuar como un separador (y si no es espacios en blanco), una combinación de std::string::find_first()
y std::string::substr()
debería hacer.
+1 por tres alternativas – Chubsdad
¿Hay alguna buena razón para preferir 'for (;;)' sobre 'while (iss >> token)' (suponiendo que 'token' se declaró antes del bucle)? En este ejemplo, sería una línea más corta y, en mi opinión, al menos no menos legible. –
@ Space_C0wb0y: (Solo que ahora entiendo tu comentario. Bueno, al menos creo que sí ...) Prefiero una variable más local sobre la concisión del ciclo 'while'. – sbi
Echa un vistazo a algos STL como find_first_of, find_first_not_of y así sucesivamente para crear uno personalizado.
que puede hacer como dicho por chubsdad o uso impulso tokenizer: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm
Hacerlo por sí mismo no es tan complicado si eres participaban por Boost.
Aquí está +1 de chubsdad :) – Chubsdad
Usted debe echar un vistazo a Boost Tokenizer
Prueba este fragmento que encontré en alguna parte (tal vez incluso por aquí?):
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}
- 1. tokenizer de cadenas en Java
- 2. Int tokenizer
- 3. String tokenizer en Objective-C para el desarrollo de aplicaciones de iPhone
- 4. ¿Tiene C# un Tokenizer de cadenas como el de Java?
- 5. boost :: tokenizer vs boost :: split
- 6. sqlite-fts3: tokenizer personalizado?
- 7. stanford nlp tokenizer
- 8. Boost tokenizer para tratar cadena citada como un token
- 9. Python incrustado en CPP: cómo recuperar los datos a CPP
- 10. Boost :: tokenizer separados por comas (C++)
- 11. Usando boost :: tokenizer con delimitadores de cadena
- 12. Manera pitónica de implementar un tokenizer
- 13. MSBuild para compilar un solo archivo CPP
- 14. imprimir una matriz bidimensional de cadenas como String
- 15. Convertir matriz de cadenas a List <string>
- 16. CPP | .h archivos (C++)
- 17. ¿Cómo usar JSON-CPP?
- 18. Incluye el archivo .cpp?
- 19. Extensión CPP y literales multilínea en Haskell
- 20. Haga nuestra propia lista <string, string, string>
- 21. ¿Cuál es el equivalente de `cpp -dD` para clang?
- 22. Configurando fuentes cpp en gradle
- 23. Servidor web: cómo analizar las solicitudes? Tokenizer de flujo asincrónico?
- 24. ¿Cuáles son los métodos para tokenizar cadenas en .Net?
- 25. String strip() para JavaScript?
- 26. estructura en diferentes archivos .cpp
- 27. wget con personajes silvestres [*] .cpp
- 28. PHP, Tokenizer, encuentre todos los argumentos de la función
- 29. ¿Existe una herramienta mejor (más moderna) que lex/flex para generar un tokenizer para C++?
- 30. ¿Afirmaciones fluidas puede utilizar una comparación insensible a las cadenas para IEnumerable <string>?
¿Por qué algunos de los ejemplos de lo siguiente: http://www.codeproject.com/KB/recipes/Tokenizer. aspx Son muy eficientes y algo elegantes. La biblioteca String Toolkit hace que el complejo procesamiento de cadenas en C++ sea simple y fácil. –
posible duplicado de [Usando strtok con std :: string] (http://stackoverflow.com/questions/289347/using-strtok-with-a-stdstring) – bobobobo