Wie man Zeichenketten mit einem Trennzeichen in C++ parst

Jinku Hu 12 Oktober 2023
  1. Verwenden der Methoden find() und substr() zum Parsen von Zeichenketten mit einem Begrenzer
  2. Verwenden Sie die Klasse stringstream und die Methode getline, um Zeichenketten mit einem Delimiter zu parsen
  3. Verwenden Sie den Kopieralgorithmus, um Zeichenketten mit einem einzelnen Leerzeichen zu analysieren
Wie man Zeichenketten mit einem Trennzeichen in C++ parst

In diesem Artikel wird erläutert, wie eine Zeichenkette durch Angabe eines Trennzeichens in C++ geparst wird.

Verwenden der Methoden find() und substr() zum Parsen von Zeichenketten mit einem Begrenzer

Diese Methode verwendet eine eingebaute find-Methode der Klasse string. Sie benötigt eine Folge von Zeichen, um als string-Typ gefunden zu werden, und die Startposition als Integer-Parameter. Wenn die Methode die übergebenen Zeichen findet, gibt sie die Position des ersten Zeichens zurück. Andernfalls gibt sie npos zurück. Wir setzen die find-Anweisung in eine while-Schleife, um über string zu iterieren, bis das letzte Trennzeichen gefunden wird. Um eine Teilzeichenkette zwischen Trennzeichen zu extrahieren, wird die Funktion substr verwendet, und bei jeder Iteration wird das Token auf einen words Vektor geschoben. Als letzter Schritt der Schleife entfernen wir den verarbeiteten Teil der Zeichenkette mit der erase-Methode.

#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 =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";
  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());
  }

  for (const auto &w : words) {
    cout << w << endl;
  }
  return EXIT_SUCCESS;
}

Ausgabe:

He
said.
The
...
Troy

Verwenden Sie die Klasse stringstream und die Methode getline, um Zeichenketten mit einem Delimiter zu parsen

In dieser Version setzen wir eine text-Zeichenkettenvariable in einen stringstream ein, um sie mit der getline-Methode zu bearbeiten. getline extrahiert Zeichen, bis das angegebene char gefunden wird und speichert das Token in der string-Variablen. Beachten Sie, dass diese Methode nur angewendet werden kann, wenn ein einzelnes Zeichenbegrenzungszeichen benötigt wird.

#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 =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";
  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;
}

Verwenden Sie den Kopieralgorithmus, um Zeichenketten mit einem einzelnen Leerzeichen zu analysieren

copy() ist eine <algorithm> Bibliotheksmethode, die durch den angegebenen Bereich von Elementen iterieren und sie in den Zielbereich kopieren kann. Zuerst initialisieren wir eine Stringstream-Variable mit dem text-Argument. Danach verwenden wir den istream_iterator, um eine Schleife über durch Leerzeichen getrennte Teilzeichenketten zu bilden und sie schließlich auf der Konsole auszugeben. Beachten Sie jedoch, dass diese Lösung nur dann funktioniert, wenn die Zeichenkette mit einem Trennzeichen für Leerzeichen getrennt werden muss.

#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 =
      "He said. The challenge Hector heard with joy, "
      "Then with his spear restrain'd the youth of Troy ";

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

  return EXIT_SUCCESS;
}
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