HOWTO · C++

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

Cet article montre 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.