Come dividere le stringhe usando delimitatore in C ++

Come dividere le stringhe usando delimitatore in C ++
Dividere una stringa usando un delimitatore è un'operazione comune nella programmazione, in particolare quando si lavora con i dati di testo. UN delimitatore è un carattere o una sequenza di caratteri usati per separare una sezione di una stringa da un'altra. Quando un testo è separato in substrings più piccoli usando a delimitatore, Il delimitatore o il separatore è predeterminato. Molte attività di programmazione, come l'analisi dei dati di input, la tokenizzazione del testo e l'elaborazione delle stringhe, utilizzano questa tecnica. Ce ne sono diversi string-scliting Metodi disponibili in C ++, ognuno con pro e contro.

In questo articolo, esploreremo alcuni dei modi comuni a Dividi una stringa usando un delimitatore in c++.

Stringhe divise usando delimitatore in C++

In C ++, ci sono più approcci per interrompere una stringa usando un delimitatore, incluso:

  • Utilizzo delle funzioni find () e substr ()
  • Utilizzando la funzione strtok ()
  • Usando la classe Stringstream

1: Utilizzo delle funzioni find () e substr ()

Una stringa può essere divisa usando le funzioni C ++ Trovare() E substr (). La prima istanza di una sottostringa si trova utilizzando il Trovare() metodo. Se non ci sono più eventi, il pezzo rimanente della stringa verrà restituito dopo essere stato inserito nel vettore. La sottostringa che inizia all'inizio del testo e termina sul delimitatore può quindi essere estratta usando il substr () funzione. Possiamo continuare a farlo fino a quando non sono stati ottenuti tutti i sottostringi.

Ecco un esempio C ++ di come farlo Dividi una stringa usando un delimitatore:

#includere
#includere
int main ()
std :: string str = "mela, banana, ciliegia";
std :: string delimiter = ",";
size_t pos = 0;
std :: token di stringa;
while ((pos = str.Trova (delimitatore)) != std :: string :: npos)
token = str.substr (0, pos);
std :: cout << token << std::endl;
str.Cancella (0, POS + delimitatore.lunghezza());

std :: cout << str << std::endl;
restituzione 0;

Nell'esempio sopra, una stringa denominata "STR" e un delimitatore chiamato "Delimitatore" Sono definiti. Le sottostringhe da "STR" vengono quindi estratti usando un ciclo while. La posizione del delimitatore viene restituita da Trovare() metodo, o std :: string :: NPOs Se non può essere localizzato. La sottostringa dall'inizio di "STR" fino al delimitatore viene estratto usando "Substr ()" In questo punto, e viene quindi stampato sulla console. La sottostringa estratta e il delimitatore vengono quindi eliminati "STR" usando il "cancellare()" funzione. Una volta che non ci sono più delimitatori "STR", Ripetiamo questa operazione. Successivamente, produciamo l'ultima sottostringa "ciliegia" alla console.

Produzione

2: usando la funzione strtok ()

IL strtok () La funzione è un'altra funzione in C ++ che può dividere efficacemente le stringhe usando un delimitatore in qualsiasi programma C ++. Elimina due input; la stringa da diviso e il carattere delimitatore. Ecco un'implementazione di strtok () funzione in c ++:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

Char Str [100];
cout << " Enter a string: " <CIN.getline (STR, 100);
char *ptr;
ptr = strtok (str, ",");
cout << " \n Splitting the string: " << endl;
mentre (PTR != Null)

cout << ptr << endl;
ptr = strtok (null, ",");

restituzione 0;

IL strtok () La funzione viene utilizzata nel codice sopra per rompere una stringa di input fornita dall'utente in token, utilizzando una virgola e uno spazio come delimitatori. Quindi pubblica ogni token sulla console su una linea separata. Ciò si ottiene memorizzando la stringa di input in un array di carbone, iterando sopra i token con un puntatore Char e quindi dividendo ripetutamente la stringa fino a quando non sono stati visualizzati tutti i token.

Produzione

3: usando la classe Stringstream

Usando il La classe è un'altra tecnica per dividere una stringa in C++. È possibile inserire e produrre dati formattati, comprese le stringhe, utilizzando questa classe. Una stringa che viene gestita come flusso può avere substrings estratti da esso usando il getline () metodo. IL getline () Il metodo estraggerà la sottostringa fino al delimitatore se lo forniamo il delimitatore come parametro.

Ecco un illustrazione di come farlo Dividi una stringa in C++ usando il stringstream () funzione.

#includere
#includere
#includere
#includere
int main ()
Std :: String input_string = "Apple, Banana, Cherry";
Std :: Vector token;
std :: stringstream ss (input_string);
std :: token di stringa;
while (std :: getline (ss, token, ','))
token.push_back (token);

per (auto t: token)
std :: cout << t << std::endl;

restituzione 0;

Nel codice sopra, un carattere delimitatore viene utilizzato per dividere una stringa di input in token usando . Prima di estrarre ogni token dal Usando il delimitatore, il programma inizializza un oggetto con la stringa di input. Un vettore di stringhe viene quindi ampliato da ogni token. Il programma quindi attraversa il vettore, stampando ogni token alla console alla fine.

Produzione

Conclusione

Dividere una stringa usando un delimitatore è un approccio efficace in C ++ e ci sono diverse funzioni integrate in C ++ che consentono di dividere le stringhe. Queste funzioni includono find (), substr (), strtok () E stringstream classe. Gli sviluppatori dovrebbero considerare i requisiti specifici della loro applicazione e scegliere la funzione che funziona meglio per loro.