Comment analyser une chaîne de caractères en utilisant un délimiteur en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les méthodes find() et substr() pour analyser une chaîne de caractères à l’aide d’un délimiteur
  2. Utilisez la classe stringstream et la méthode getline pour analyser la chaîne de caractères à l’aide d’un délimiteur
  3. Utiliser l’algorithme copy pour analyser une chaîne de caractères avec un seul délimiteur d’espacement
Comment analyser une chaîne de caractères en utilisant un délimiteur en C++

Cet article explique comment analyser une chaîne de caractères en spécifiant un délimiteur en C++.

Utilisez les méthodes find() et substr() pour analyser une chaîne de caractères à l’aide d’un délimiteur

Cette méthode utilise une méthode intégrée de find de la classe string. Elle prend une séquence de caractères à trouver comme un type de chaîne et la position de départ comme un paramètre entier. Si la méthode trouve les caractères passés, elle retourne la position du premier caractère. Sinon, elle retourne npos. Nous mettons l’instruction find dans la boucle while pour itérer sur la chaîne jusqu’à ce que le dernier délimiteur soit trouvé. Pour extraire une sous-chaîne entre les délimiteurs, on utilise la fonction substr, et à chaque itération, le jeton est poussé sur un vecteur words. Comme dernière étape de la boucle, nous retirons la partie traitée de la chaîne avec la méthode erase.

#include <iostream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::vector;

int main() {
  string text =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";
  string delim = " ";
  vector<string> words{};

  size_t pos = 0;
  while ((pos = text.find(delim)) != string::npos) {
    words.push_back(text.substr(0, pos));
    text.erase(0, pos + delim.length());
  }

  for (const auto &w : words) {
    cout << w << endl;
  }
  return EXIT_SUCCESS;
}

Production:

He
said.
The
...
Troy

Utilisez la classe stringstream et la méthode getline pour analyser la chaîne de caractères à l’aide d’un délimiteur

Dans cette version, nous mettons une variable de type text dans un stringstream afin d’opérer sur celui-ci avec la méthode “getline”. Cette méthode extrait les caractères jusqu’à ce que le char donné soit trouvé et stocke le jeton dans la variable string. Notez que cette méthode ne peut être appliquée que lorsqu’un seul délimiteur de caractères est nécessaire.

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;

int main() {
  string text =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";
  char del = ' ';
  vector<string> words{};

  stringstream sstream(text);
  string word;
  while (std::getline(sstream, word, del)) words.push_back(word);

  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

Utiliser l’algorithme copy pour analyser une chaîne de caractères avec un seul délimiteur d’espacement

copy est une méthode de bibliothèque <algorithm>, qui peut itérer à travers la gamme d’éléments spécifiés et les copier dans la gamme de destination. Dans un premier temps, nous initialisons une variable istringstream avec l’argument text. Après cela, nous utilisons istream_iterator pour boucler les sous-chaînes séparées par des espaces et les sortir finalement sur la console. Notez, cependant, que cette solution ne fonctionne que si la chaîne doit être séparée sur un délimiteur d’espace blanc.

#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::string;
using std::vector;

int main() {
  string text =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";

  istringstream iss(text);
  copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
       std::ostream_iterator<string>(cout, "\n"));

  return EXIT_SUCCESS;
}
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