Cos'è C ++ Stringstream e come usarlo?

Cos'è C ++ Stringstream e come usarlo?

Un oggetto stringa istanziato dalla classe String è una struttura dei dati dell'elenco. L'elenco è una serie di personaggi ed è apprezzato come tale. L'oggetto stringa C ++ ha molti metodi. Tuttavia, manca di determinate operazioni, che sono meglio offerte se è vista come un flusso. Ecco dove stringstream entra. Stringstream è un flusso, a cui può essere usato:

- Conta il numero di parole in un oggetto stringa

- Ottieni frequenze di singole parole in un oggetto stringa

- Converti una parola in forma di testo nell'oggetto stringa in un numero e viceversa

I caratteri spostati dall'oggetto stringa al programma C ++ sono inseriti e rappresentati dal stringstream oggetto. I caratteri spostati dal programma C ++ all'oggetto stringa sta emettendo. Stringstream (i.e. sstream) usa il istringstream E Ostringstream classi. Un oggetto istanziato da istringstream è responsabile dell'ingresso di caratteri in a stringstream. Un oggetto istanziato da Ostringstream è responsabile della produzione di caratteri da a stringstream a un oggetto stringa.

Questo tutorial spiega cosa sstream è e come usarlo. L'oggetto stringa di destinazione fa parte del programma C ++.

Per eseguire input, output o entrambi, in una sessione, il programma C ++ dovrebbe iniziare con:

#includere
#includere
#includere

Contenuto dell'articolo

  • Creazione di un oggetto Stringstream
  • Funzionamento di strisce di ingresso
  • Funzionamento del flusso di strisce di uscita
  • Invio delle prime parole in variabili
  • Contare il numero di parole in stringa letterale
  • Frequenze di parole individuali
  • Stringa su numero e viceversa
  • Conclusione

Creazione di un oggetto Stringstream

È risaputo che stringstream può essere dichiarato e applicato contemporaneamente in una dichiarazione. Tuttavia, questo non è l'approccio in questo tutorial. In questo tutorial, a stringstream L'oggetto è istanziato da una classe in un'istruzione e utilizzato in un'altra istruzione.

UN stringstream Può essere istanziato per la lettura (immissione). UN stringstream Può essere istanziato per la scrittura (output). UN stringstream può essere istanziato sia per la lettura che per la scrittura.

Per creare un oggetto Stream per la lettura, usa:

sstream strm (ios_base :: in);

dove STRM è l'oggetto del flusso; e "in" della classe iOS_Base significa per la lettura.

Per creare un oggetto Stream per la scrittura, usa:

sstream strm (ios_base :: out);

dove STRM è l'oggetto del flusso; e "fuori" della classe iOS_Base significa per scrivere.

Per creare un oggetto Stream per la lettura o la scrittura, utilizzare:

sstream strm (ios_base :: in | ios_base :: out);

dove “ios_base :: in | ios_base :: out ", è per la lettura o la scrittura.

Funzionamento di strisce di ingresso

Il testo da inserire su uno stringstream da un oggetto stringa può essere eseguito in due modi: usando l'inserzione (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

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

stringstream strm1 (ios_base :: in);
strm1 << "We are the world!";
string Stri2 = "Questa è la terra!";
stringstream strm2 (ios_base :: in);
strm2 << stri2;
stringstream strm3 (ios_base :: in);
strm3.STR ("Marte è il prossimo.");
String Stri4 = "Che ne dici di Giove?";
stringstream strm4 (ios_base :: in);
strm4.STR (STRI4);
restituzione 0;

L'oggetto stringa può essere l'identificatore o l'identificatore. Si noti che nella dichiarazione dell'oggetto sstream, viene utilizzato "stringstream" e non "sstream", sebbene entrambi i termini significhino la stessa cosa. Il termine sstream dovrebbe essere utilizzato nella direttiva include.

Funzionamento del flusso di strisce di uscita

Una parola è un testo di stringa che non ha alcun spazio (") all'interno. Output da uno stringstream significa inviare una parola stringa dall'oggetto sstream a un oggetto stringa. Ciò richiede l'operatore di estrazione (>>). Il seguente programma invia una parola da un oggetto sstream a un oggetto stringa:

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

Stringstream Strm;
strm << "love";
string stri = "odio";
strm >> stri;
cout << stri << endl;
restituzione 0;

L'output è:

Amore

Qualsiasi valore di stringa che l'oggetto stringa avrebbe potuto avere viene sostituito. Se lo stringstream viene dichiarato sopra e senza alcun argomento, allora è per input o output.

Se il valore della stringa dell'oggetto Stringstream (buffer) ha spazi, verrà inviata solo la prima parola. La funzione membro SStream, STR (), deve essere utilizzata per inviare l'intero valore della stringa, inclusi gli spazi. STR () può essere utilizzato per convertire una stringa letterale nel contenuto di sstream. Può anche essere utilizzato per restituire tutto il contenuto del buffer di flusso, inclusi gli spazi, all'oggetto stringa. Il seguente programma illustra questo:

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

Stringstream Strm;
strm << "I love her, but he hates her.";
string stri;
STRI = STRM.str ();
cout << stri << endl;
restituzione 0;

L'output è:

La amo, ma la odia.

Invio delle prime parole in variabili

Nella stringa,

“La amo, ma la odia."

Se le prime 5 parole devono essere rappresentate dalle variabili, a, b, c, d, e, allora queste variabili possono essere fatte per tenere le parole. Il seguente codice illustra questo:

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

Stringstream Strm;
strm << "I love her, but he hates her.";
String A, B, C, D, E;
strm >> a >> b >> c >> d >> e;
cout << a << " << b << " << c << " << d << " << e << endl;
restituzione 0;

L'output è:

La amo, ma lui

Un singolo personaggio è una parola. Si noti che la virgola è stata unita a "lei". Se la virgola fosse stata separata da "lei", allora sarebbe stata considerata una parola separata.

Contare il numero di parole in stringa letterale

Nella sezione precedente, sono state identificate solo le prime 5 parole. Per inviare tutte le parole a diverse variabili, il numero di parole deve essere noto. Se il problema è solo quello di conoscere il numero di parole nel buffer sstream, allora può essere fatto in un loop while. È inviando tutte le parole a una variabile, mentre conta il numero di volte in cui viene eseguita l'invio e fino alla fine del flusso (fine del file). Il seguente codice illustra questo:

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

Stringstream Strm;
strm << "I love her, but he hates her.";
int counter = 0;
String Temp;
Mentre (!strm.eof ())
strm >> temp;
contatore += 1;

cout << counter << endl;
restituzione 0;

L'output è 7. L'arresto è attaccato al secondo "lei". Si noti che l'indicatore per la fine del file è la funzione membro sstream, eof ().

Frequenze di parole individuali

Nel valore della stringa,

"La amo e lui ama sua sorella, anche se odia suo fratello."

La parola, "lei", si verifica 3 volte e la frequenza di "lei" è indicata per essere 3. La parola, "lui", appare 2 volte e si dice che la frequenza di "lui" sia 2. Il resto delle parole ha una frequenza di 1 ciascuna. La frequenza di ogni parola può essere determinata come segue:

Avere tutte le parole in una mappa C ++ senza ripetizione. Considera la seguente dichiarazione:

MP [temp] ++;

Dove MP è un oggetto mappa. La prima volta che questa affermazione viene incontrata in un loop while, si inserisce in una nuova coppia chiave/valore, la cui chiave è la parola stringa della temperatura variabile e il cui valore è 1. La prossima volta che viene incontrata nello stesso circuito while, con questa chiave particolare, nessuna nuova coppia di tasti/valore viene aggiunta alla mappa. Il valore di questa coppia chiave/valore è semplicemente incrementato.

Quindi, la strategia è quella di avere questa affermazione in un loop while e tutte le parole nel buffer SSStream vengono lette in una variabile temporanea. E ogni valore per ciascuna coppia chiave/valore nella mappa diventa finalmente la frequenza della chiave (parola). Il seguente programma illustra questo:

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

Stringstream Strm;
strm << "I love her and he loves her sister, though he hates her brother.";
String Temp;
carta geografica MP;
while (strm >> temp)
MP [temp] ++;

per (mappa:: iterator IT = MP.inizio(); Esso != mp.FINE(); It ++)
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0;

L'output è:

I => 1
e => 1
fratello. => 1
odia => 1
lui => 2
lei => 3
amore => 1
ama => 1
sorella, => 1
Anche se => 1

Stringa su numero e viceversa

Stringa al numero

Per convertire una parola di stringa in un numero, basta inviare la parola stringa dal buffer sstrream a una variabile dichiarata come numero. Per convertire in un INT, invia la parola stringa in una variabile INT. Per convertire in un galleggiante, inviare la parola stringa in una variabile float. Il seguente programma illustra questi:

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

Stringstream Strm;
strm << " 30 ";
int myint;
strm >> myint;
int Intsult = MyInt + 10;
cout << intResult << endl;
strm << " 2.5 ";
fluttuare myfloat;
strm >> myfloat;
float fltresult = myfloat + 0.3;
cout << fltResult << endl;
restituzione 0;

L'output è:

40
2.8

Numero alla stringa

Per convertire un numero in una parola stringa, basta inviar il numero al buffer SStream. Quindi, leggi il buffer del flusso in un oggetto stringa. Per convertire un INT in una stringa, ha inviato il numero intero a SStream. Per convertire un galleggiante in una stringa, invia il galleggiante a sstream. Il seguente programma illustra questi:

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

Stringstream Strm1;
int myint = 30;
strm1 << myInt;
String Intstr;
strm1 >> intstr;
String InttrRes = intstr + "Good";
cout << intStrRes << endl;
Stringstream Strm2;
fluttuare myflt = 2.5;
strm2 << myflt;
String fltstr;
strm2 >> fltstr;
String fltstrres = fltstr + "Sì";
cout << fltStrRes << endl;
restituzione 0;

L'output è:

30 Bene
2.5 Sì

Due oggetti di flusso sono stati usati qui per i diversi tipi di numeri.

Nota: IL sstream Buffer è costituito solo da personaggi.

Conclusione

Stringstream significa Flusso di stringhe. È anche scritto come sstream. È un flusso. L'obiettivo per questo flusso è un oggetto stringa. Il flusso può utilizzare l'operatore di inserzione (<>). Il flusso è molto utile per i seguenti scopi: Contare il numero di parole in un oggetto stringa, ottenere frequenze di singole parole in un oggetto stringa e convertire una parola in forma di testo nell'oggetto stringa in un numero e viceversa.