String aufteilen in C++
-
Verwenden der Funktionen
std::string::find
undstd::string::erase
zum Aufteilen von Strings in C++ -
Verwendung des Idioms
std::getline
underase-remove
zum Aufteilen von Strings in C++ -
Verwendung von
std::istringstream
mitstd::copy
undstd::istream_iterator
zum 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++