Wie man eine Zeichenkette in C++ in Tokens übersetzt

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktionen find und substr, um eine Zeichenkette in C++ zu tokenisieren
  2. Verwenden Sie die Funktionen std::stringstream und getline, um eine Zeichenkette in C++ zu tokenisieren
  3. Verwenden Sie den istringstream und den copy Algorithmus, um eine Zeichenkette in C++ zu tokenisieren
Wie man eine Zeichenkette in C++ in Tokens übersetzt

In diesem Artikel werden mehrere Methoden zur Tokenisierung einer Zeichenkette in C++ erläutert.

Verwenden Sie die Funktionen find und substr, um eine Zeichenkette in C++ zu tokenisieren

Die Klasse std::string hat eine eingebaute find-Funktion, um nach einer Folge von Zeichen in einem gegebenen String-Objekt zu suchen. Die Funktion find gibt die Position des ersten gefundenen Zeichens in der Zeichenkette zurück und gibt npos zurück, wenn nicht gefunden. Der Aufruf der Funktion find wird in die if-Anweisung eingefügt, um über die Zeichenkette zu iterieren, bis das letzte Zeichenketten-Token extrahiert ist.

Beachten Sie, dass ein Benutzer ein beliebiges Trennzeichen vom Typ Zeichenkette angeben und es an die Methode find übergeben kann. Die Token werden in den vector von Zeichenketten geschoben und der bereits verarbeitete Teil wird bei jeder Iteration mit der Funktion erase() entfernt.

#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;
}

Ausgabe:

Think
you
are
escaping
and
run
into
yourself.

Verwenden Sie die Funktionen std::stringstream und getline, um eine Zeichenkette in C++ zu tokenisieren

Stringstream kann verwendet werden, um eine zu verarbeitende Zeichenkette aufzunehmen und getline zu verwenden, um Token zu extrahieren, bis das angegebene Trennzeichen gefunden wird. Beachten Sie, dass diese Methode nur mit Einzelzeichen-Trennzeichen funktioniert.

#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;
}

Ausgabe:

Think
you
are
escaping
and
run
into
yourself.

Verwenden Sie den istringstream und den copy Algorithmus, um eine Zeichenkette in C++ zu tokenisieren

Alternativ kann man die Fuktion copy aus dem <algorithm> Header verwenden und Zeichenketten-Token auf Leerzeichen-Begrenzer extrahieren. Im folgenden Beispiel iterieren und streamen wir nur die Token auf die Standardausgabe. Um die Zeichenkette mit der copy-Methode zu verarbeiten, fügen wir sie in den Stringstream ein und verwenden seine Iteratoren.

#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;
}

Ausgabe:

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