Analyser une séquence de chaînes séparées par des virgules en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les fonctions std::string::find et std::string::erase pour analyser une séquence de chaînes séparées par des virgules en C++
  2. Utilisez la fonction std::getline pour analyser la séquence de chaînes séparées par des virgules
Analyser une séquence de chaînes séparées par des virgules en C++

Cet article présente plusieurs méthodes sur la façon d’analyser une séquence de chaînes séparées par des virgules en C++.

Utilisez les fonctions std::string::find et std::string::erase pour analyser une séquence de chaînes séparées par des virgules en C++

La méthode std::find est une fonction intégrée de la classe std::string, et elle peut être utilisée pour trouver la position de la sous-chaîne donnée. Il prend un seul argument dans ce cas qui désigne la sous-chaîne à trouver. Toute variable de chaîne à plusieurs caractères peut être initialisée pour être transmise en tant qu’argument. Bien que, dans l’exemple suivant, nous déclarions une seule virgule contenant string. Puisque la méthode find renvoie la position de la sous-chaîne et string::npos lorsque la sous-chaîne n’est pas trouvée, nous pouvons mettre l’expression de comparaison dans une boucle while qui va s’exécuter jusqu’à ce que l’expression évalue true.

Nous stockons également la chaîne analysée à chaque itération dans le conteneur vector. Ensuite, la méthode erase est appelée pour supprimer les caractères avant et y compris le premier séparateur virgule trouvé afin de continuer à traiter le même objet string dans l’itération suivante. Enfin, nous sortons les éléments stockés dans le vector dans le flux cout.

#include <algorithm>
#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 = "1,2,3,4,5,6,7,8,9,10";
  string delimiter = ",";
  vector<string> words{};

  size_t pos = 0;
  while ((pos = text.find(delimiter)) != string::npos) {
    words.push_back(text.substr(0, pos));
    text.erase(0, pos + delimiter.length());
  }
  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

Production:

1
2
3
4
5
6
7
8
9

Utilisez la fonction std::getline pour analyser la séquence de chaînes séparées par des virgules

La solution précédente manque l’extraction du dernier nombre dans la séquence séparée par des virgules. Il peut donc être préférable d’utiliser la méthode suivante en utilisant la fonction std::getline plutôt que d’ajouter une vérification conditionnelle dans l’exemple de code précédent. getline lit les caractères du flux d’entrée donné et les stocke dans un objet string. La fonction prend également un troisième argument facultatif pour spécifier le délimiteur par lequel diviser la chaîne d’entrée. Nous stockons également les chaînes extraites dans le conteneur std::vector à chaque itération pour une utilisation ultérieure.

#include <algorithm>
#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 = "1,2,3,4,5,6,7,8,9,10";
  char delimiter = ',';
  vector<string> words{};

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

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

  return EXIT_SUCCESS;
}

Production:

1
2
3
4
5
6
7
8
9
10
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