Analizza stringa utilizzando un delimitatore in C++

  1. Usa i metodi find() e substr() per analizzare la stringa usando un delimitatore
  2. Usa la classe stringstream e il metodo getline per analizzare la stringa usando un delimitatore
  3. Usa la funzione copy() per analizzare la stringa con un singolo delimitatore di spazio bianco

Questo articolo spiegherà come analizzare una stringa specificando un delimitatore in C++.

Usa i metodi find() e substr() per analizzare la stringa usando un delimitatore

Questo metodo utilizza un metodo find incorporato della classe string. Ci vuole una sequenza di caratteri per essere trovata come tipo stringa e la posizione iniziale come parametro intero. Se il metodo trova i caratteri passati, restituisce la posizione del primo carattere. In caso contrario, restituisce npos. Mettiamo l’istruzione find nel ciclo while per iterare su stringa finché non viene trovato l’ultimo delimitatore. Per estrarre una sottostringa tra delimitatori, viene utilizzata la funzione substr e ad ogni iterazione il token viene inserito in un vettore di words. Come ultimo passo del ciclo, rimuoviamo la parte processata della stringa con il metodo delete.

#include <iostream>
#include <string>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::istringstream;

int main(){
    string text = "He said. The challenge Hector heard with joy, "
               "Then with his spear restrain'd the youth of Troy ";
    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());
    }

    for (const auto &w : words) {
        cout << w << endl;
    }
    return EXIT_SUCCESS;
}

Produzione:

He
said.
The
...
Troy

Usa la classe stringstream e il metodo getline per analizzare la stringa usando un delimitatore

In questo metodo, stiamo inserendo la variabile stringa text in uno stringstream per operare su di essa con il metodo getline. getline estrae i caratteri finché non viene trovato il dato char e memorizza il token nella variabile string. Si noti che questo metodo può essere applicato solo quando è necessario un delimitatore di carattere singolo.

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::stringstream;

int main(){
    string text = "He said. The challenge Hector heard with joy, "
               "Then with his spear restrain'd the youth of Troy ";
    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;
}

Usa la funzione copy() per analizzare la stringa con un singolo delimitatore di spazio bianco

copy() è una funzione di libreria <algorithm>, che può iterare attraverso l’intervallo di elementi specificato e copiarli nell’intervallo di destinazione. All’inizio inizializziamo una variabile istringstream con l’argomento text. Dopodiché, utilizziamo istream_iterator per eseguire il ciclo su sottostringhe separate da spazi e infine inviarle alla console. Si noti, tuttavia, che questa soluzione funziona solo se la stringa deve essere divisa sul delimitatore di spazi.

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iterator>

using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector; using std::istringstream;

int main(){
    string text = "He said. The challenge Hector heard with joy, "
               "Then with his spear restrain'd the youth of Troy ";

    istringstream iss(text);
    copy(std::istream_iterator<string>(iss),
         std::istream_iterator<string>(),
         std::ostream_iterator<string>(cout, "\n"));


    return EXIT_SUCCESS;
}

Articolo correlato - C++ String

  • Trova sottostringa in stringa in C++
  • Converti String in Char Array in C++