Cadena dividida en C++
-
Utilice las funciones
std::string::find
ystd::string::erase
para dividir la cadena en C++ -
Use
std::getline
yerase-remove
Idiom para dividir una cadena en C++ -
Utilice
std::istringstream
constd::copy
ystd::istream_iterator
para dividir la cadena en C++
Este artículo explicará varios métodos de cómo dividir una cadena en C++.
Utilice las funciones std::string::find
y std::string::erase
para dividir la cadena en C++
Las funciones find
y erase
son miembros integrados de la clase std::string
y se pueden combinar para dividir el texto en tokens delimitados por los caracteres dados. Este método se puede utilizar para dividir una cadena por cualquier subcadena declarada por el usuario o por un solo carácter. Aún así, el siguiente código de ejemplo demuestra el escenario en el que el delimitador es a
. El método find
devuelve una posición de la subcadena si se encuentra o string::npos
si no se encuentra. Tenga en cuenta que debemos eliminar la parte procesada de la cadena
más el delimitador. Por lo tanto, se llama a la función erase()
para realizar esta tarea.
#include <iostream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::vector;
int main() {
string text =
"Vivamus quis sagittis diam. "
"Cras accumsan, dui id varius "
"vitae tortor.";
string delimiter = "a";
vector<string> words{};
size_t pos;
while ((pos = text.find(delimiter)) != string::npos) {
words.push_back(text.substr(0, pos));
text.erase(0, pos + delimiter.length());
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Producción :
Viv
mus quis s
gittis di
m. Cr
s
ccums
n, dui id v
rius vit
Use std::getline
y erase-remove
Idiom para dividir una cadena en C++
Un método similar para resolver el problema dado es usar la función std::getline
, que también puede extraer subcadenas entre el delimitador que especifica el usuario. El siguiente código de muestra divide el texto en cada carácter de espacio y almacena las cadenas extraídas en un contenedor std::vector
. Sin embargo, tenga en cuenta que hay un modismo de borrar-eliminar
que se utiliza para eliminar los caracteres de puntuación de las cadenas antes de que se almacenen.
#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::vector;
int main() {
string text =
"Vivamus quis sagittis diam. "
"Cras accumsan, dui id varius "
"vitae tortor.";
vector<string> words{};
char delimiter = ' ';
istringstream sstream(text);
string word;
while (std::getline(sstream, word, delimiter)) {
word.erase(std::remove_if(word.begin(), word.end(), ispunct), word.end());
words.push_back(word);
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Producción :
Vivamus
quis
sagittis
diam
Cras
accumsan
dui
id
varius
vitae
tortor
Utilice std::istringstream
con std::copy
y std::istream_iterator
para dividir la cadena en C++
Alternativamente, se podría inicializar el objeto std::istringstream
con el texto que necesita ser dividido y atravesarlo con std::istream_iterator
. Tenga en cuenta que este método solo puede dividir cadenas por espacios, que es el delimitador predeterminado para istream_iterator
. Finalmente, necesitamos copiar las cadenas extraídas al contenedor vector
, lo cual se hace usando el algoritmo std::copy
.
#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::vector;
int main() {
string text =
"Vivamus quis sagittis diam. "
"Cras accumsan, dui id varius "
"vitae tortor.";
vector<string> words{};
char delimiter = ' ';
istringstream iss(text);
copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
std::back_inserter(words));
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Producción :
Vivamus
quis
sagittis
diam.
Cras
accumsan,
dui
id
varius
vitae
tortor.
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++