HOWTO · C++
Supprimer les espaces de la chaîne en C++
Cet article explique comment supprimer des espaces d'une chaîne en C++
Cet article présente plusieurs méthodes expliquant comment supprimer des espaces d’une chaîne en C++.
Utilisez l’idiome effacer-supprimer pour supprimer les espaces d’une chaîne en C++
L’une des méthodes les plus utiles pour la manipulation de plage en C++ est l’idiome erase-remove qui se compose de deux fonctions - std::erase (fonction intégrée pour la plupart des conteneurs STL) et std::remove (la partie de la bibliothèque d’algorithmes STL). Notez que les deux sont enchaînés pour effectuer l’opération de suppression sur l’objet donné. La fonction std::remove prend deux itérateurs pour spécifier la plage, et le troisième argument pour indiquer la valeur de l’élément à supprimer. Dans ce cas, nous spécifions directement un caractère d’espace, mais n’importe quel caractère peut être spécifié pour supprimer toutes ses occurrences dans la chaîne.
#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;
}
Production:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.
D’autre part, l’utilisateur peut également passer un prédicat unaire comme troisième argument à l’algorithme std::remove. Le prédicat doit avoir une valeur bool pour chaque élément, et lorsque le résultat est true, les valeurs correspondantes sont supprimées de la plage. Ainsi, nous pouvons utiliser une fonction prédéfinie isspace qui vérifie les caractères d’espaces multiples comme l’espace - " ", la nouvelle ligne - \n, la tabulation horizontale - \t, et plusieurs autres.
#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;
}
Production:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.
Utiliser la fonction personnalisée pour supprimer les espaces de la chaîne en C++
Notez que toutes les solutions précédentes ont modifié l’objet de chaîne d’origine, mais parfois, il peut être nécessaire de créer une nouvelle chaîne avec tous les espaces supprimés. Nous pouvons implémenter une fonction personnalisée en utilisant le même idiome effacer-supprimer, qui prend la référence de chaîne et renvoie une valeur analysée à stocker dans un objet chaîne séparé. Cette méthode peut également être modifiée pour prendre en charge un autre paramètre de fonction qui spécifiera le caractère à supprimer.
#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;
}
Production:
Arbitrary str ing with lots of spaces to be removed .
Arbitrarystringwithlotsofspacestoberemoved.