Cómo tokenizar una cadena en C++
-
Usar las funciones
find
ysubstr
para hacer un token a una cadena en C++ -
Usa las funciones
std::stringstream
ygetline
para hacer un token a una cadena en C++ -
Usa el algoritmo
istringstream
ycopy
para ingerir una cadena en C++
Este artículo explicará varios métodos de cómo tokenizar una cadena en C++.
Usar las funciones find
y substr
para hacer un token a una cadena en C++
La clase std::string
tiene una función find
incorporada para buscar una secuencia de caracteres en un objeto string dado. La función find
devuelve la posición del primer carácter encontrado en la cadena y devuelve npos
si no se encuentra. La llamada a la función find
se inserta en la sentencia if
para iterar sobre la cadena hasta que se extrae el último token de la cadena.
Note que un usuario puede especificar cualquier delimitador de tipo string
y pasarlo al método find
. Los tokens son empujados al vector
de las cadenas y la parte ya procesada es eliminada con la función erase()
en cada iteración.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
string text = "Think you are escaping and run into yourself.";
int main() {
string delim = " ";
vector<string> words{};
size_t pos = 0;
while ((pos = text.find(delim)) != string::npos) {
words.push_back(text.substr(0, pos));
text.erase(0, pos + delim.length());
}
if (!text.empty()) words.push_back(text.substr(0, pos));
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Resultado:
Think
you
are
escaping
and
run
into
yourself.
Usa las funciones std::stringstream
y getline
para hacer un token a una cadena en C++
stringstream
puede ser utilizado para ingerir una cadena para ser procesada y usar getline
para extraer fichas hasta que se encuentre el delimitador dado. Nótese que este método sólo funciona con delimitadores de un solo carácter.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "Think you are escaping and run into yourself.";
char del = ' ';
vector<string> words{};
stringstream sstream(text);
string word;
while (std::getline(sstream, word, del)) words.push_back(word);
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Resultado:
Think
you
are
escaping
and
run
into
yourself.
Usa el algoritmo istringstream
y copy
para ingerir una cadena en C++
Alternativamente, podemos usar la función copy
del encabezado <algorithm>
y extraer fichas de cadena en delimitadores de espacios en blanco. En el siguiente ejemplo, sólo iteramos y enviamos los tokens de cadena a la salida estándar. Para procesar la cadena con el método copy
, la insertamos en istringstream
y utilizamos sus iteradores.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "Think you are escaping and run into yourself.";
string delim = " ";
vector<string> words{};
istringstream iss(text);
copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
std::ostream_iterator<string>(cout, "\n"));
return EXIT_SUCCESS;
}
Resultado:
Think
you
are
escaping
and
run
into
yourself.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++