String aufteilen in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der Funktionen std::string::find und std::string::erase zum Aufteilen von Strings in C++
  2. Verwendung des Idioms std::getline und erase-remove zum Aufteilen von Strings in C++
  3. Verwendung von std::istringstream mit std::copy und std::istream_iterator zum Aufteilen von Strings in C++
String aufteilen in C++

In diesem Artikel werden verschiedene Methoden zum Teilen einer Zeichenkette in C++ erläutert.

Verwenden der Funktionen std::string::find und std::string::erase zum Aufteilen von Strings in C++

Die Funktionen find und erase sind integrierte Elemente der Klasse std::string und können kombiniert werden, um den Text in Token aufzuteilen, die durch die angegebenen Zeichen begrenzt sind. Diese Methode kann verwendet werden, um eine Zeichenkette durch einen vom Benutzer deklarierten Teilstring oder ein einzelnes Zeichen zu teilen. Der folgende Beispielcode zeigt jedoch das Szenario, in dem das Trennzeichen a ist. Die Methode find gibt eine Position des Teilstrings zurück, wenn er gefunden wird, oder string::npos, wenn er nicht gefunden wird. Beachten Sie, dass wir den verarbeiteten Teil der Zeichenkette plus das Trennzeichen löschen müssen. Daher wird die Funktion erase aufgerufen, um diese Aufgabe zu erledigen.

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

Ausgabe:

Viv
mus quis s
gittis di
m. Cr
s
ccums
n, dui id v
rius vit

Verwendung des Idioms std::getline und erase-remove zum Aufteilen von Strings in C++

Eine ähnliche Methode zur Lösung des gegebenen Problems ist die Verwendung der Funktion std::getline, mit der auch TeilZeichenketten zwischen dem vom Benutzer angegebenen Trennzeichen extrahiert werden können. Der nächste Beispielcode teilt den Text auf jedes Leerzeichen und speichert die extrahierten Zeichenketten in einem std::vector-Container. Beachten Sie jedoch, dass es eine Redewendung zum Löschen und Entfernen gibt, mit der Satzzeichen aus den Zeichenketten gelöscht werden, bevor sie gespeichert werden.

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

Ausgabe:

Vivamus
quis
sagittis
diam
Cras
accumsan
dui
id
varius
vitae
tortor

Verwendung von std::istringstream mit std::copy und std::istream_iterator zum Aufteilen von Strings in C++

Alternativ könnte man das Objekt std::istringstream mit dem zu teilenden Text initialisieren und mit std::istream_iterator durchlaufen. Beachten Sie, dass diese Methode Zeichenketten nur durch Leerzeichen aufteilen kann. Dies ist das Standardtrennzeichen für den istream_iterator. Schließlich müssen wir die extrahierten Zeichenketten in den Container vector kopieren, was mit dem Algorithmus std::copy erfolgt.

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

Ausgabe:

Vivamus
quis
sagittis
diam.
Cras
accumsan,
dui
id
varius
vitae
tortor.
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