¿Cómo se divide una cadena en tokens en C++?División de cadenas en C++
Respuesta
Depende de cuán complejo sea el delimitador de tokens y si hay más de uno. Para problemas fáciles, solo use std :: istringstream y std :: getline. Para tareas más complejas o si desea iterar los tokens de una manera compatible con STL, use el Tokenizer de Boost. Otra posibilidad (aunque más desordenada que cualquiera de estos dos) es configurar un ciclo while que llame a std :: string :: find y actualice la posición del último token encontrado para que sea el punto de inicio para buscar el siguiente. Pero esta es probablemente la más propensa a errores de las 3 opciones.
Intente utilizar stringstream:
std::string line("A line of tokens");
std::stringstream lineStream(line);
std::string token;
while(lineStream >> token)
{
}
Compruebe hacia fuera mi respuesta a su última pregunta:
C++ Reading file Tokens
esto funciona muy bien para mí :), pone los resultados en elems
. delim
puede ser cualquier char
.
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;
}
Por qué devolver elems. ¿Cuándo se pasa a la función como parámetro de referencia? –
oh, solo por conveniencia. Entonces, si lo necesita, puede hacer algo como: split (line, ',', elems) .at (2); es completamente innecesario devolverlo. –
Puede utilizar la función C strtok:
/* strtok example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
El Boost Tokenizer también hará el trabajo:
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
int main(){
using namespace std;
using namespace boost;
string s = "This is, a test";
tokenizer<> tok(s);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout << *beg << "\n";
}
}
Tenga cuidado con strtok en código de subprocesos múltiples. http://www.linuxjournal.com/article/1363 –
Con this Mingw distro que incluye Boost:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <ostream>
#include <algorithm>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
vector<string> v;
split(v, "1=2&3=4&5=6", is_any_of("=&"));
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
Vea también impulsar :: separación de String Algo library
string str1("hello abc-*-ABC-*-aBc goodbye"); vector<string> tokens; boost::split(tokens, str1, boost::is_any_of("-*")); // tokens == { "hello abc","ABC","aBc goodbye" }
- 1. Función de división de cadenas
- 2. División de cadenas en el primer punto
- 3. División de cadenas en palabras individuales Java
- 4. Comportamiento del método de división de cadenas
- 5. División doble en C
- 6. División de matrices en C++
- 7. ¿Hive tiene una función de división de cadenas?
- 8. división de cadenas utilizando un delimitador en Python
- 9. ¿Por qué se devuelven cadenas vacías en resultados de división()?
- 10. mejores cadenas de división CSV en Oracle 9i
- 11. Índices de división de cadenas de Python - división al final de la cadena
- 12. C# problema de división sencilla
- 13. división de cadenas a base de un delimitador
- 14. C++ - tipo de la división?
- 15. División de enteros en C++ 11
- 16. C división entera y piso
- 17. Problemas con la división en C#
- 18. /euclidiana número entero división de la división
- 19. C# variables en cadenas
- 20. desagüe cadenas en C
- 21. División de cadenas de ruta en unidades, rutas y partes de nombre de archivo
- 22. Conjuntos de cadenas en C
- 23. Normalización de cadenas Unicode en C/C++
- 24. división c Objetivo de dos enteros
- 25. División de una cadena en un iterador
- 26. Comportamiento de división de cadenas en cadena vacía y en cadena de delimitador único
- 27. División de C++ std :: cadena utilizando tokens, p. Ej. ";"
- 28. QString División
- 29. C# formato de cadenas
- 30. Biblioteca de cadenas C
DUP de http://stackoverflow.com/questions/236129/c-how-to-split-a-string – ididak
¿Por qué algunos de los ejemplos de la 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. –