Wie man eine Zeichenkette in C++ in Tokens übersetzt
-
Verwenden Sie die Funktionen
find
undsubstr
, um eine Zeichenkette in C++ zu tokenisieren -
Verwenden Sie die Funktionen
std::stringstream
undgetline
, um eine Zeichenkette in C++ zu tokenisieren -
Verwenden Sie den
istringstream
und dencopy
Algorithmus, um eine Zeichenkette in C++ zu tokenisieren
In diesem Artikel werden mehrere Methoden zur Tokenisierung einer Zeichenkette in C++ erläutert.
Verwenden Sie die Funktionen find
und substr
, um eine Zeichenkette in C++ zu tokenisieren
Die Klasse std::string
hat eine eingebaute find
-Funktion, um nach einer Folge von Zeichen in einem gegebenen String-Objekt zu suchen. Die Funktion find
gibt die Position des ersten gefundenen Zeichens in der Zeichenkette zurück und gibt npos
zurück, wenn nicht gefunden. Der Aufruf der Funktion find
wird in die if
-Anweisung eingefügt, um über die Zeichenkette zu iterieren, bis das letzte Zeichenketten-Token extrahiert ist.
Beachten Sie, dass ein Benutzer ein beliebiges Trennzeichen vom Typ Zeichenkette
angeben und es an die Methode find
übergeben kann. Die Token werden in den vector
von Zeichenketten geschoben und der bereits verarbeitete Teil wird bei jeder Iteration mit der Funktion erase()
entfernt.
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
string text = "Think you are escaping and run into yourself.";
int main() {
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());
}
if (!text.empty()) words.push_back(text.substr(0, pos));
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Ausgabe:
Think
you
are
escaping
and
run
into
yourself.
Verwenden Sie die Funktionen std::stringstream
und getline
, um eine Zeichenkette in C++ zu tokenisieren
Stringstream
kann verwendet werden, um eine zu verarbeitende Zeichenkette aufzunehmen und getline
zu verwenden, um Token zu extrahieren, bis das angegebene Trennzeichen gefunden wird. Beachten Sie, dass diese Methode nur mit Einzelzeichen-Trennzeichen funktioniert.
#include <algorithm>
#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::stringstream;
using std::vector;
int main() {
string text = "Think you are escaping and run into yourself.";
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;
}
Ausgabe:
Think
you
are
escaping
and
run
into
yourself.
Verwenden Sie den istringstream
und den copy
Algorithmus, um eine Zeichenkette in C++ zu tokenisieren
Alternativ kann man die Fuktion copy
aus dem <algorithm>
Header verwenden und Zeichenketten-Token auf Leerzeichen-Begrenzer extrahieren. Im folgenden Beispiel iterieren und streamen wir nur die Token auf die Standardausgabe. Um die Zeichenkette mit der copy
-Methode zu verarbeiten, fügen wir sie in den Stringstream
ein und verwenden seine Iteratoren.
#include <algorithm>
#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::stringstream;
using std::vector;
int main() {
string text = "Think you are escaping and run into yourself.";
string delim = " ";
vector<string> words{};
istringstream iss(text);
copy(std::istream_iterator<string>(iss), std::istream_iterator<string>(),
std::ostream_iterator<string>(cout, "\n"));
return EXIT_SUCCESS;
}
Ausgabe:
Think
you
are
escaping
and
run
into
yourself.
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++