Comment marquer une chaîne de caractères en C++

Jinku Hu 12 octobre 2023
  1. Utiliser les fonctions find et substr pour marquer une chaîne en C++
  2. Utilisez les fonctions std::stringstream et getline pour marquer une chaîne en C++
  3. Utiliser l’algorithme istringstream et copy pour marquer une chaîne en C++
Comment marquer une chaîne de caractères en C++

Cet article explique plusieurs méthodes de tokenisation d’une chaîne de caractères en C++.

Utiliser les fonctions find et substr pour marquer une chaîne en C++

La classe std::string a une fonction find intégrée pour rechercher une séquence de caractères dans un objet chaîne donné. La fonction find retourne la position du premier caractère trouvé dans la chaîne et retourne npos si elle n’est pas trouvée. L’appel de la fonction find est inséré dans l’instruction if pour itérer sur la chaîne jusqu’à ce que le dernier caractère soit extrait.

Notez qu’un utilisateur peut spécifier n’importe quel délimiteur de type string et le passer à la méthode find. Les jetons sont poussés vers le vector des chaînes et la partie déjà traitée est supprimée avec la fonction erase() à chaque itération.

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

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

string text = "Think you are escaping and run into yourself.";
int main() {
  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());
  }
  if (!text.empty()) words.push_back(text.substr(0, pos));
  for (const auto &str : words) {
    cout << str << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Think
you
are
escaping
and
run
into
yourself.

Utilisez les fonctions std::stringstream et getline pour marquer une chaîne en C++

Le stringstream peut être utilisé pour ingérer une chaîne à traiter et utiliser getline pour extraire des jetons jusqu’à ce que le délimiteur donné soit trouvé. Notez que cette méthode ne fonctionne qu’avec des délimiteurs à un seul caractère.

#include <algorithm>
#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::stringstream;
using std::vector;

int main() {
  string text = "Think you are escaping and run into yourself.";
  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;
}

Production :

Think
you
are
escaping
and
run
into
yourself.

Utiliser l’algorithme istringstream et copy pour marquer une chaîne en C++

On peut aussi utiliser la fonction copy de l’en-tête <algorithm> et extraire des chaînes de caractères sur les délimiteurs d’espace blanc. Dans l’exemple suivant, nous ne faisons qu’itérer et diffuser des jetons vers la sortie standard. Pour traiter la chaîne avec la méthode copy, nous l’insérons dans istringstream et utilisons ses itérateurs.

#include <algorithm>
#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::stringstream;
using std::vector;

int main() {
  string text = "Think you are escaping and run into yourself.";
  string delim = " ";
  vector<string> words{};

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

  return EXIT_SUCCESS;
}

Production :

Think
you
are
escaping
and
run
into
yourself.
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