Effacer la chaîne en C++

Jinku Hu 12 octobre 2023
Effacer la chaîne en C++

Cet article montrera comment utiliser la fonction std::string::erase pour supprimer un caractère d’une chaîne en C++.

Utilisez la fonction std::string::erase pour supprimer les caractères spécifiés dans la chaîne

effacer est une fonction membre std::string qui peut être utilisée pour supprimer les caractères donnés de la chaîne. Il a trois surcharges, dont nous allons discuter chacune dans les exemples suivants.

La première surcharge accepte deux arguments de type size_type désignant l’index et le count. Cette version essaiera d’effacer le nombre count de caractères commençant à la position index, mais dans certains scénarios, il peut y avoir moins de caractères après l’index donné, de sorte que la fonction est dite supprimer min(count, size() - index) caractères. La première surcharge de erase renvoie la valeur *this.

Ces deux paramètres ont des valeurs par défaut, et lorsque nous passons une seule valeur d’argument à la fonction, le résultat peut être un peu contre-intuitif. En fait, la valeur donnée est interprétée comme le paramètre index, et le count est supposé être std::npos. Par conséquent, cela entraîne l’effacement du reste de la chaîne après la position donnée.

L’extrait de code suivant montre des scénarios similaires - l’un utilisant des fonctions membres find et l’autre - en passant explicitement la valeur d’index.

#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.";

  text.erase(0, 6);
  cout << text << endl;

  text.erase(text.find('c'));
  cout << text << endl;

  text.erase(2);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Production:

ipsum dolor sit amet, consectetur adipiscing elit.
ipsum dolor sit amet,
ip

La seconde surcharge de la fonction accepte un seul paramètre représentant la position du caractère à effacer. Cet argument doit être le type d’itérateur correspondant ; sinon, il invoquera la première surcharge. Nous pouvons utiliser cette version de la fonction avec l’algorithme std::find pour supprimer la première occurrence du caractère donné de la chaîne. Sinon, on peut passer la position relative du caractère à l’aide des itérateurs begin ou end.

#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.";

  text.erase(std::find(text.begin(), text.end(), ','));
  cout << text << endl;

  text.erase(text.end() - 5);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Production:

Lorem ipsum dolor sit amet consectetur adipiscing elit.
Lorem ipsum dolor sit amet consectetur adipiscing lit.

Enfin, nous avons la troisième surcharge qui prend deux itérateurs comme paramètres et supprime tous les caractères de la plage correspondante. L’exemple de code suivant montre comment nous pouvons supprimer tous les caractères de la chaîne, à l’exception du premier.

#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.";

  text.erase(text.begin() + 1, text.end());
  cout << text << endl;

  return EXIT_SUCCESS;
}

Production:

L
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