Tokenizza una stringa in C++
-
Usa le funzioni
find
esubstr
per tokenizzare una stringa in C++ -
Usa le funzioni
std::stringstream
egetline
per tokenizzare una stringa in C++ -
Usa l’algoritmo
istringstream
ecopy
per tokenizzare una stringa in C++
Questo articolo spiegherà diversi metodi su come tokenizzare una stringa in C++.
Usa le funzioni find
e substr
per tokenizzare una stringa in C++
La classe std::string
ha una funzione find
incorporata per cercare una sequenza di caratteri in un dato oggetto stringa. La funzione find
restituisce la posizione del primo carattere trovato nella stringa e restituisce npos
se non trovato. La chiamata alla funzione find
viene inserita nell’istruzione if
per iterare sulla stringa fino a quando non viene estratto l’ultimo token di stringa.
Si noti che un utente può specificare qualsiasi delimitatore di tipo stringa
e passarlo al metodo find
. I token vengono spinti al vettore
di stringhe e la parte già elaborata viene rimossa con la funzione erase()
ad ogni iterazione.
#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;
}
Produzione:
Think
you
are
escaping
and
run
into
yourself.
Usa le funzioni std::stringstream
e getline
per tokenizzare una stringa in C++
stringstream
può essere utilizzato per importare una stringa da elaborare e utilizzare getline
per estrarre i token finché non viene trovato il delimitatore specificato. Tieni presente che questo metodo funziona solo con delimitatori di un carattere.
#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;
}
Produzione:
Think
you
are
escaping
and
run
into
yourself.
Usa l’algoritmo istringstream
e copy
per tokenizzare una stringa in C++
In alternativa, possiamo usare la funzione copy
dall’intestazione <algorithm>
ed estrarre i token di stringa su delimitatori di spazio bianco. Nell’esempio seguente, iteriamo e trasmettiamo solo token allo standard output. Per elaborare la stringa con il metodo copy
, la inseriamo in istringstream
e utilizziamo i suoi iteratori.
#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;
}
Produzione:
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 Facebook