Analysieren Sie eine durch Kommas getrennte Zeichenkettensequenz in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktionen std::string::find und std::string::erase, um die durch Kommas getrennte Zeichenkettensequenz in C++ zu analysieren
  2. Verwenden Sie die Funktion std::getline, um eine durch Kommas getrennte Zeichenkettensequenz zu analysieren
Analysieren Sie eine durch Kommas getrennte Zeichenkettensequenz in C++

In diesem Artikel werden verschiedene Methoden zum Parsen einer durch Kommas getrennten Zeichenkettenfolge in C++ beschrieben.

Verwenden Sie die Funktionen std::string::find und std::string::erase, um die durch Kommas getrennte Zeichenkettensequenz in C++ zu analysieren

Die Methode std::find ist eine integrierte Funktion der Klasse std::string und kann zum Ermitteln der Position des angegebenen Teilstrings verwendet werden. In diesem Fall ist ein einziges Argument erforderlich, das den zu findenden Teilstring angibt. Jede mehrstellige Zeichenkettenvariable kann initialisiert werden, um als Argument übergeben zu werden. Obwohl wir im folgenden Beispiel ein einzelnes Komma deklarieren, das string enthält. Da die Methode find die Position des Teilstrings und string::npos zurückgibt, wenn der Teilstring nicht gefunden wird, können wir den Vergleichsausdruck in eine while-Schleife einfügen, die ausgeführt wird, bis der Ausdruck true ergibt.

Wir speichern auch die analysierte Zeichenkette bei jeder Iteration im Container vector. Anschließend wird die Methode erase aufgerufen, um die Zeichen vor und einschließlich des ersten gefundenen Komma-Trennzeichens zu löschen und das gleiche Objekt string in der nächsten Iteration weiter zu verarbeiten. Schließlich geben wir die gespeicherten Elemente im Vektor in den Stream cout aus.

#include <algorithm>
#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 = "1,2,3,4,5,6,7,8,9,10";
  string delimiter = ",";
  vector<string> words{};

  size_t pos = 0;
  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;
}

Ausgabe:

1
2
3
4
5
6
7
8
9

Verwenden Sie die Funktion std::getline, um eine durch Kommas getrennte Zeichenkettensequenz zu analysieren

Bei der vorherigen Lösung wird die letzte Zahl in der durch Kommas getrennten Sequenz nicht extrahiert. Daher ist es möglicherweise besser, die folgende Methode mit der Funktion std::getline zu verwenden, als im vorherigen Codebeispiel eine bedingte Prüfung hinzuzufügen. getline liest Zeichen aus dem angegebenen Eingabestream und speichert sie in einem string-Objekt. Die Funktion verwendet auch ein optionales drittes Argument, um das Trennzeichen anzugeben, nach dem die EingabeZeichenkette aufgeteilt werden soll. Wir speichern die extrahierten Zeichenketten auch bei jeder Iteration im Container std::vector zur späteren Verwendung.

#include <algorithm>
#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 = "1,2,3,4,5,6,7,8,9,10";
  char delimiter = ',';
  vector<string> words{};

  stringstream sstream(text);
  string word;
  while (std::getline(sstream, word, delimiter)) {
    words.push_back(word);
  }

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

  return EXIT_SUCCESS;
}

Ausgabe:

1
2
3
4
5
6
7
8
9
10
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