Eliminar puntuación de una cadena en C++

Jinku Hu 12 octubre 2023
  1. Utilice las funciones std::erase y std::remove_if para eliminar la puntuación de la cadena en C++
  2. Use la función personalizada para eliminar la puntuación de la cadena en C++
  3. Utilice el método iterativo para eliminar la puntuación de la cadena en C++
Eliminar puntuación de una cadena en C++

Este artículo explicará varios métodos para eliminar la puntuación de una cadena en C++.

Utilice las funciones std::erase y std::remove_if para eliminar la puntuación de la cadena en C++

std::remove_if es parte de la biblioteca de algoritmos STL, y puede eliminar todos los elementos para los cuales la condición dada se evalúa como verdadera. La condición debe devolver el valor bool para cada elemento en el rango. En este caso, pasamos la función ispunct para verificar los símbolos de puntuación. Observe que std::remove_if devuelve un iterador de paso al final para el nuevo rango de valores, por lo que estamos encadenando la llamada con el método erase que da como resultado la cadena analizada. Esta solución funciona de manera similar a la expresión borrar-eliminar.

#include <iostream>
#include <string>

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

int main() {
  string text =
      "Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
      "porttitor.";

  cout << text << endl;

  text.erase(std::remove_if(text.begin(), text.end(), ispunct), text.end());
  cout << text << endl;

  return EXIT_SUCCESS;
}

Producción :

Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor

Use la función personalizada para eliminar la puntuación de la cadena en C++

Alternativamente, se puede mover el método anterior a una función separada, creando una copia local de la cadena dada y operando en ella mientras se devuelve el valor analizado al código de la persona que llama. Esta función se puede utilizar para ampliar la funcionalidad para admitir diferentes grupos de caracteres o incluso pasar la función de predicado personalizado para el tercer parámetro del algoritmo remove_if.

#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_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
  return tmp;
}

int main() {
  string text =
      "Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
      "porttitor.";

  cout << text << endl;

  string parsed_text = removeSpaces(text);
  cout << parsed_text << endl;

  return EXIT_SUCCESS;
}

Producción :

Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor

Utilice el método iterativo para eliminar la puntuación de la cadena en C++

Otra alternativa es implementar una función separada que recorra cada carácter de la cadena. La función toma la cadena por referencia y utiliza el bucle for para atravesar la cadena. En cada iteración, se llama a ispunct para comprobar si el carácter es un símbolo de puntuación o no. Tenga en cuenta que, a la variable len se le asigna el tamaño de la cadena en cada condición coincidente porque el objeto de cadena original es modificado por la función erase, y el bucle necesita renovar la cuenta.

#include <iostream>
#include <string>

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

void removeSpaces2(string& s) {
  for (int i = 0, len = s.size(); i < len; i++) {
    if (ispunct(s[i])) {
      s.erase(i--, 1);
      len = s.size();
    }
  }
}

int main() {
  string text =
      "Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
      "porttitor.";

  cout << text << endl;

  removeSpaces2(text);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Producción :

Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
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