Cómo cortar una cadena en C++
Este artículo explicará cómo recortar una cadena en C++.
Utiliza los métodos erase()
, find_first_not_of()
y find_last_not_of()
para implementar las funciones de recorte de cadenas
Dado que la biblioteca estándar de C++ no contiene las funciones para el recorte de cadenas, tendrá que implementarlas usted mismo o utilizar bibliotecas externas como Boost (ver algoritmos de cadenas).
En los siguientes ejemplos, demostramos cómo construir funciones personalizadas usando 2 métodos incorporados std::string
. En primer lugar, implementamos la función leftTrim
, que recorta los caracteres pasados como argumento desde el lado izquierdo de la cadena. Especificamos arbitrariamente los caracteres .
, ,
, /
y los espacios en blanco a recortar.
La función leftTrim
llama al método find_first_not_of
para encontrar el primer carácter que no es igual al char
-s en el argumento dado y devuelve una posición al encontrado. Entonces el método erase
elimina el rango de caracteres desde el principio hasta la posición encontrada.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& leftTrim(string& str, string& chars) {
str.erase(0, str.find_first_not_of(chars));
return str;
}
int main() {
string chars_to_trim = ".,/ ";
string text = ",., C++ Standard";
cout << text << endl;
leftTrim(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
Resultado:
,., C++ Standard
C++ Standard
Alternativamente, podemos revertir la función trimLeft
para recortar los caracteres dados del lado derecho de la cadena. En este caso, utilizamos el método find_last_not_of
, que busca el último igual a ninguno de los caracteres pasados como argumento. En consecuencia, se llama al método erase
con el parámetro posición encontrada + 1
.
Nótese que ambas funciones operan sobre la cadena en su lugar y no devuelven una copia de la versión recortada.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& rightTrim(string& str, string& chars) {
str.erase(str.find_last_not_of(chars) + 1);
return str;
}
int main() {
string chars_to_trim = ".,/ ";
string text = "C++ Standard /././";
cout << text << endl;
rightTrim(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
Resultado:
C++ Standard /././
C++ Standard
Finalmente, podemos combinar las funciones anteriores para implementar la función trimString
, que elimina los caracteres de ambos lados. La función tiene los mismos parámetros que las versiones izquierda/derecha. trimString
llama a leftTrim
pasándole el resultado de la función rigthTrim
como argumento. Puedes intercambiar los lugares de estas llamadas a la función sin alterar la corrección del programa.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
string& leftTrim(string& str, string& chars) {
str.erase(0, str.find_first_not_of(chars));
return str;
}
string& rightTrim(string& str, string& chars) {
str.erase(str.find_last_not_of(chars) + 1);
return str;
}
string& trimString(string& str, string& chars) {
return leftTrim(rightTrim(str, chars), chars);
}
int main() {
string chars_to_trim = ".,/ ";
string text = ",,, .. C++ Standard ...";
cout << text << endl;
trimString(text, chars_to_trim);
cout << text << endl;
return EXIT_SUCCESS;
}
,,, .. C++ Standard ...
C++ Standard
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++