Chaîne divisée en C++
- 
          
            Utilisez les fonctions std::string::findetstd::string::erasepour diviser la chaîne en C++
- 
          
            Utilisez les idiomes std::getlineeteffacer-supprimerpour diviser la chaîne en C++
- 
          
            Utilisez std::istringstreamavecstd::copyetstd::istream_iteratorpour diviser la chaîne en C++
 
Cet article explique plusieurs méthodes de fractionnement d’une chaîne en C++.
Utilisez les fonctions std::string::find et std::string::erase pour diviser la chaîne en C++
    
Les fonctions find et erase sont des membres intégrés de la classe std::string, et elles peuvent être combinées pour diviser le texte en jetons délimités par les caractères donnés. Cette méthode peut être utilisée pour diviser une chaîne par n’importe quelle sous-chaîne déclarée par l’utilisateur ou par un seul caractère. Pourtant, l’exemple de code suivant illustre le scénario lorsque le délimiteur est a. La méthode find renvoie une position de la sous-chaîne si elle est trouvée ou string::npos si elle n’est pas trouvée. Notez que nous devons supprimer la partie traitée de la chaîne plus le délimiteur. Ainsi, la fonction erase est appelée pour gérer cette tâche.
#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 =
      "Vivamus quis sagittis diam. "
      "Cras accumsan, dui id varius "
      "vitae tortor.";
  string delimiter = "a";
  vector<string> words{};
  size_t pos;
  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:
Viv
mus quis s
gittis di
m. Cr
s
ccums
n, dui id v
rius vit
Utilisez les idiomes std::getline et effacer-supprimer pour diviser la chaîne en C++
Une méthode similaire pour résoudre le problème donné est d’utiliser la fonction std::getline, qui peut également extraire des sous-chaînes entre le délimiteur spécifié par l’utilisateur. L’exemple de code suivant divise le texte sur chaque caractère d’espace et stocke les chaînes extraites dans un conteneur std::vector. Notez cependant qu’il existe un idiome effacer-supprimer utilisé pour supprimer tous les caractères de ponctuation des chaînes avant qu’ils ne soient stockés.
#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 =
      "Vivamus quis sagittis diam. "
      "Cras accumsan, dui id varius "
      "vitae tortor.";
  vector<string> words{};
  char delimiter = ' ';
  istringstream sstream(text);
  string word;
  while (std::getline(sstream, word, delimiter)) {
    word.erase(std::remove_if(word.begin(), word.end(), ispunct), word.end());
    words.push_back(word);
  }
  for (const auto &str : words) {
    cout << str << endl;
  }
  return EXIT_SUCCESS;
}
Production:
Vivamus
quis
sagittis
diam
Cras
accumsan
dui
id
varius
vitae
tortor
Utilisez std::istringstream avec std::copy et std::istream_iterator pour diviser la chaîne en C++
Alternativement, on pourrait initialiser l’objet std::istringstream avec le texte à scinder et le parcourir avec std::istream_iterator. Notez que cette méthode ne peut fractionner les chaînes que par des espaces qui est le délimiteur par défaut pour le istream_iterator. Enfin, nous devons copier les chaînes extraites dans le conteneur vector, ce qui se fait à l’aide de l’algorithme std::copy.
#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 =
      "Vivamus quis sagittis diam. "
      "Cras accumsan, dui id varius "
      "vitae tortor.";
  vector<string> words{};
  char delimiter = ' ';
  istringstream iss(text);
  copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
       std::back_inserter(words));
  for (const auto &str : words) {
    cout << str << endl;
  }
  return EXIT_SUCCESS;
}
Production:
Vivamus
quis
sagittis
diam.
Cras
accumsan,
dui
id
varius
vitae
tortor.
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++
