Comment analyser une chaîne de caractères en utilisant un délimiteur en C++
-
Utilisez les méthodes
find()
etsubstr()
pour analyser une chaîne de caractères à l’aide d’un délimiteur -
Utilisez la classe
stringstream
et la méthodegetline
pour analyser la chaîne de caractères à l’aide d’un délimiteur -
Utiliser l’algorithme
copy
pour analyser une chaîne de caractères avec un seul délimiteur d’espacement
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;
}
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++