Supprimer les espaces de la chaîne en C++

Jinku Hu 12 octobre 2023
  1. Utilisez l’idiome effacer-supprimer pour supprimer les espaces d’une chaîne en C++
  2. Utiliser la fonction personnalisée pour supprimer les espaces de la chaîne en C++
Supprimer les espaces de la 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.
Auteur: 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

Article connexe - C++ String