Die boost::split-Funktion in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion boost::split, um den gegebenen String zu tokenisieren
  2. Verwendung von stringstream mit der Funktion getline zum Aufteilen der Zeichenkette mit Begrenzungszeichen
Die boost::split-Funktion in C++

Dieser Artikel zeigt, wie Sie die Funktion boost::split in C++ verwenden.

Verwenden Sie die Funktion boost::split, um den gegebenen String zu tokenisieren

Boost bietet leistungsstarke Tools, um die C++-Standardbibliothek um ausgereifte und gut getestete Bibliotheken zu erweitern. Dieser Artikel untersucht die Funktion boost::split, die Teil der Boost-String-Algorithmus-Bibliothek ist. Letzteres beinhaltet mehrere String-Manipulationsalgorithmen wie Trimmen, Ersetzen usw.

Die Funktion boost::split zerlegt die gegebene String-Sequenz in durch das Trennzeichen getrennte Token. Der Benutzer sollte eine Prädikatfunktion angeben, die das Trennzeichen als dritten Parameter identifiziert. Die bereitgestellte Funktion sollte true zurückgeben, wenn das angegebene Element ein Trennzeichen ist.

Im folgenden Beispiel geben wir ein isspace-Funktionsobjekt an, um Leerzeichen im gegebenen Text zu identifizieren und in Token aufzuteilen. boost::split benötigt auch einen Zielsequenzcontainer, um tokenisierte Teilstrings zu speichern. Beachten Sie, dass der Zielcontainer als erster Parameter übergeben wird und sein vorheriger Inhalt nach dem Funktionsaufruf überschrieben wird.

#include <boost/algorithm/string/split.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

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

int main() {
  string text = "Lorem ipsum  dolor sit amet, consectetur adipiscing elit.";
  vector<string> words;

  boost::split(words, text, isspace);
  for (const auto &item : words) {
    cout << item << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Lorem; ipsum; ; dolor; sit; amet,; consectetur; adipiscing; elit.;

Der Aufruf boost::split im vorherigen Code-Schnipsel speichert leere Strings, wenn zwei oder mehr Trennzeichen nebeneinander stehen. Wir können jedoch den vierten optionalen Parameter angeben - boost::token_compress_on und angrenzende Trennzeichen werden zusammengeführt, wie im folgenden Beispiel gezeigt. Beachten Sie, dass Boost-Bibliotheken auf dem System installiert sein müssen, wenn Sie diese beiden Codeausschnitte erfolgreich ausführen möchten.

#include <boost/algorithm/string/split.hpp>
#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 = "Lorem ipsum  dolor sit amet, consectetur adipiscing elit.";
  vector<string> words;

  boost::split(words, text, isspace, boost::token_compress_on);
  for (const auto &item : words) {
    cout << item << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Lorem; ipsum; dolor; sit; amet,; consectetur; adipiscing; elit.;

Verwendung von stringstream mit der Funktion getline zum Aufteilen der Zeichenkette mit Begrenzungszeichen

Alternativ kann man die Klasse stringstream und die Funktion getline verwenden, um Text mit dem angegebenen Zeichentrennzeichen aufzuteilen. In diesem Fall verwenden wir nur STL-Tools und es ist nicht erforderlich, Boost-Header einzuschließen. Beachten Sie, dass diese Codeversion umfangreicher ist und zusätzliche Schritte benötigt, um die angrenzenden Trennzeichen zusammenzuführen.

#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 = "Lorem ipsum  dolor sit amet, consectetur adipiscing elit.";
  vector<string> words;

  char space_char = ' ';
  stringstream sstream(text);
  string word;
  while (std::getline(sstream, word, space_char)) {
    words.push_back(word);
  }

  for (const auto &item : words) {
    cout << item << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Lorem; ipsum; ; dolor; sit; amet,; consectetur; adipiscing; elit.;
Autor: 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

Verwandter Artikel - C++ Boost