Eliminar espacios de cadena en C++

Jinku Hu 12 octubre 2023
  1. Utilice el lenguaje borrar-eliminar para eliminar espacios de la cadena en C++
  2. Utilice la función personalizada para eliminar espacios de la cadena en C++
Eliminar espacios de cadena en C++

Este artículo mostrará varios métodos sobre cómo eliminar espacios de una cadena en C++.

Utilice el lenguaje borrar-eliminar para eliminar espacios de la cadena en C++

Uno de los métodos más útiles para la manipulación de rangos en C++ es el modismo borrar-eliminar que consta de dos funciones: std::erase (función incorporada para la mayoría de los contenedores STL) y std::remove (la parte de la biblioteca de algoritmos STL). Tenga en cuenta que ambos están encadenados para realizar la operación de eliminación en el objeto dado. La función std::remove toma dos iteradores para especificar el rango y el tercer argumento para denotar el valor del elemento a eliminar. En este caso, especificamos directamente un carácter de espacio, pero se puede especificar cualquier carácter para eliminar todas sus apariciones en la cadena.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  str.erase(std::remove(str.begin(), str.end(), ' '), str.end());

  cout << str << endl;

  return EXIT_SUCCESS;
}

Producción :

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

Por otro lado, el usuario también puede pasar un predicado unario como tercer argumento al algoritmo std::remove. El predicado debe evaluar el valor bool para cada elemento, y cuando el resultado es true, los valores correspondientes se eliminan del rango. Por lo tanto, podemos utilizar una función predefinida isspace que busca múltiples caracteres de espacio en blanco como espacio - " ", nueva línea - \n, tabulación horizontal - \t, y varios otros.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  str.erase(std::remove_if(str.begin(), str.end(), isspace), str.end());

  cout << str << endl;

  return EXIT_SUCCESS;
}

Producción :

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

Utilice la función personalizada para eliminar espacios de la cadena en C++

Tenga en cuenta que todas las soluciones anteriores modificaron el objeto de cadena original, pero a veces, es posible que sea necesario crear una nueva cadena con todos los espacios eliminados. Podemos implementar una función personalizada usando el mismo idioma borrar-eliminar, que toma la referencia de cadena y devuelve un valor analizado para ser almacenado en un objeto de cadena separado. Este método también podría modificarse para admitir otro parámetro de función que especifique el carácter que debe eliminarse.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

string removeSpaces(const string& s) {
  string tmp(s);
  tmp.erase(std::remove(tmp.begin(), tmp.end(), ' '), tmp.end());
  return tmp;
}

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  string newstr = removeSpaces(str);

  cout << newstr << endl;

  return EXIT_SUCCESS;
}

Producción :

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.
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