Eliminar puntuación de una cadena en C++
-
Utilice las funciones
std::erase
ystd::remove_if
para eliminar la puntuación de la cadena en C++ - Use la función personalizada para eliminar la puntuación de la cadena en C++
- Utilice el método iterativo para eliminar la puntuación de la 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
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++