Analyser une séquence de chaînes séparées par des virgules en C++
-
Utilisez les fonctions
std::string::find
etstd::string::erase
pour analyser une séquence de chaînes séparées par des virgules en C++ -
Utilisez la fonction
std::getline
pour analyser la séquence de chaînes séparées par des virgules
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
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 FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++