Analizza una sequenza di stringhe separate da virgole in C++
-
Usa le funzioni
std::string::find
estd::string::erase
per analizzare la sequenza di stringhe separate da virgole in C++ -
Usa la funzione
std::getline
per analizzare la sequenza di stringhe separate da virgole
Questo articolo illustrerà più metodi su come analizzare una sequenza di stringhe separate da virgole in C++.
Usa le funzioni std::string::find
e std::string::erase
per analizzare la sequenza di stringhe separate da virgole in C++
Il metodo std::find
è una funzione incorporata della classe std::string
e può essere utilizzato per trovare la posizione della sottostringa data. In questo caso è necessario un singolo argomento che denota la sottostringa da trovare. Qualsiasi variabile stringa multi-carattere può essere inizializzata per essere passata come argomento. Sebbene, nel seguente esempio, dichiariamo una singola virgola contenente stringa
. Poiché il metodo find
restituisce la posizione della sottostringa e string::npos
quando la sottostringa non viene trovata, possiamo mettere l’espressione di confronto in un cicli while
che verrà eseguito fino a quando l’espressione non sarà considerata vera.
Memorizziamo anche la stringa analizzata ad ogni iterazione nel contenitore vector
. Quindi, viene chiamato il metodo erase
per eliminare i caratteri prima e incluso il primo delimitatore di virgola trovato per continuare a elaborare lo stesso oggetto stringa
nell’iterazione successiva. Infine, inviamo gli elementi memorizzati nel vettore
al flusso cout
.
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
string delimiter = ",";
vector<string> words{};
size_t pos = 0;
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;
}
Produzione:
1
2
3
4
5
6
7
8
9
Usa la funzione std::getline
per analizzare la sequenza di stringhe separate da virgole
La soluzione precedente non riesce a estrarre l’ultimo numero inf nella sequenza separata da virgole. Quindi potrebbe essere meglio usare il seguente metodo usando la funzione std::getline
piuttosto che aggiungere un controllo condizionale nell’esempio di codice precedente. getline
legge i caratteri dal flusso di input specificato e li memorizza in un oggetto stringa
. La funzione accetta anche un terzo argomento opzionale per specificare il delimitatore in base al quale suddividere la stringa di input. Memorizziamo anche le stringhe estratte nel contenitore std::vector
ad ogni iterazione per un uso successivo.
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
using std::vector;
int main() {
string text = "1,2,3,4,5,6,7,8,9,10";
char delimiter = ',';
vector<string> words{};
stringstream sstream(text);
string word;
while (std::getline(sstream, word, delimiter)) {
words.push_back(word);
}
for (const auto &str : words) {
cout << str << endl;
}
return EXIT_SUCCESS;
}
Produzione:
1
2
3
4
5
6
7
8
9
10
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