String aufteilen in C++
- 
          
            Verwenden der Funktionen std::string::findundstd::string::erasezum Aufteilen von Strings in C++
- 
          
            Verwendung des Idioms std::getlineunderase-removezum Aufteilen von Strings in C++
- 
          
            Verwendung von std::istringstreammitstd::copyundstd::istream_iteratorzum Aufteilen von Strings 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.
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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++
