Cómo cortar una cadena en C++

Jinku Hu 12 octubre 2023
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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Artículo relacionado - C++ String