Supprimer la ponctuation d'une chaîne en C++
-
Utilisez les fonctions
std::erase
etstd::remove_if
pour supprimer la ponctuation d’une chaîne en C++ - Utiliser la fonction personnalisée pour supprimer la ponctuation de la chaîne en C++
- Utilisez la méthode itérative pour supprimer la ponctuation de la chaîne en C++
Cet article explique plusieurs méthodes pour supprimer la ponctuation d’une chaîne en C++.
Utilisez les fonctions std::erase
et std::remove_if
pour supprimer la ponctuation d’une chaîne en C++
std::remove_if
fait partie de la bibliothèque d’algorithmes STL, et il peut supprimer tous les éléments pour lesquels la condition donnée est évaluée vraie. La condition doit renvoyer la valeur booléenne
pour chaque élément de la plage. Dans ce cas, nous passons la fonction ispunct
pour vérifier les symboles de ponctuation. Notez que std::remove_if
renvoie un itérateur passe-fin pour la nouvelle plage de valeurs, donc nous enchaînons l’appel avec la méthode erase
qui aboutit à la chaîne analysée. Cette solution fonctionne de manière similaire à l’idiome effacer-supprimer
.
#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;
}
Production:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Utiliser la fonction personnalisée pour supprimer la ponctuation de la chaîne en C++
Alternativement, on peut déplacer la méthode précédente vers une fonction distincte, en créant une copie locale de la chaîne donnée et en opérant dessus tout en renvoyant la valeur analysée au code de l’appelant. Cette fonction peut être utilisée pour étendre la fonctionnalité pour prendre en charge différents groupes de caractères ou même passer la fonction de prédicat personnalisé pour le troisième paramètre de l’algorithme 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;
}
Production:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Utilisez la méthode itérative pour supprimer la ponctuation de la chaîne en C++
Une autre alternative consiste à implémenter une fonction distincte qui itère sur chaque caractère de la chaîne. La fonction prend la chaîne par référence et utilise la boucle for
pour parcourir la chaîne. A chaque itération, ispunct
est appelé pour vérifier si le caractère est un signe de ponctuation ou non. Notez que la variable len
se voit attribuer la taille de la chaîne sur chaque condition de correspondance car l’objet chaîne d’origine est modifié par la fonction erase
, et la boucle doit renouveler le décompte.
#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;
}
Production:
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 FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++