Was ist C ++ - Stringsstream und wie man es benutzt??

Was ist C ++ - Stringsstream und wie man es benutzt??

Ein aus der Zeichenfolgenklasse instanziierter String -Objekt ist eine Listendatenstruktur. Die Liste ist eine Reihe von Charakteren und wird als solche geschätzt. Das C ++ - String -Objekt hat viele Methoden. Es fehlen jedoch bestimmte Operationen, die am besten angeboten werden, wenn es als Stream angesehen wird. Das ist wo Stringsstream kommt herein. Stringsstream ist ein Stream, der verwendet werden kann:

- Zählen Sie die Anzahl der Wörter in einem String -Objekt

- Rufen Sie einzelne Wortfrequenzen in einem String -Objekt ein

- Konvertieren Sie ein Wort in Textform im String-Objekt in eine Nummer und umgekehrt

Das Verschieben von Zeichen aus dem String -Objekt in das C ++ - Programm wird eingeben und durch die dargestellt Stringsstream Objekt. Das Verschieben von Zeichen aus dem C ++ - Programm zum String -Objekt wird ausgegeben. Stringsstream (i.e. Sstream) verwendet die IStringstream Und Ostringstream Klassen. Ein Objekt, das aus instanziiert ist IStringstream ist verantwortlich für die Eingabe von Zeichen in a Stringsstream. Ein Objekt, das aus instanziiert ist Ostringstream ist verantwortlich für die Ausgabe von Zeichen von a Stringsstream zu einem String -Objekt.

Dieses Tutorial erklärt was Sstream ist und wie man es benutzt. Das Ziel -String -Objekt ist Teil des C ++ - Programms.

Um in einer Sitzung Eingabe, Ausgabe oder beides durchzuführen, sollte das C ++ - Programm mit:

#enthalten
#enthalten
#enthalten

Artikelinhalt

  • Erstellen eines Stringsstream -Objekts
  • Eingabe -Stringstream -Betrieb
  • Ausgangsstringstream -Betrieb
  • Senden Sie die ersten Wörter in Variablen
  • Zählen Sie die Anzahl der Wörter in String buchstäblich
  • Individuelle Wortfrequenzen
  • Zeichenfolge zu Nummer und umgekehrt
  • Abschluss

Erstellen eines Stringsstream -Objekts

Es ist bekannt, dass Stringsstream kann in einer Erklärung gleichzeitig deklariert und gleichzeitig angewendet werden. Dies ist jedoch nicht der Ansatz in diesem Tutorial. In diesem Tutorial a Stringsstream Das Objekt wird aus einer Klasse in einer Aussage instanziiert und in einer anderen Aussage verwendet.

A Stringsstream kann zum Lesen instanziiert werden (Eingabe). A Stringsstream kann zum Schreiben instanziiert werden (Ausgabe). A Stringsstream kann sowohl für das Lesen als auch für das Schreiben instanziiert werden.

Um ein Stream -Objekt zum Lesen zu erstellen, verwenden Sie:

sstream strm (ios_base :: in);

wo strm das Stream -Objekt ist; und „in“ der iOS_Base -Klasse bedeutet, dass sie lesen.

Um ein Stream -Objekt zum Schreiben zu erstellen, verwenden Sie:

sstream strm (ios_base :: out);

wo strm das Stream -Objekt ist; und „out“ der iOS_Base -Klasse bedeutet, Schreiben zu schreiben.

Um ein Stream -Objekt zum Lesen oder Schreiben zu erstellen, verwenden Sie:

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

wo “ios_base :: in | ios_base :: out ”, dient zum Lesen oder Schreiben.

Eingabe -Stringstream -Betrieb

Text zum Eingeben in einen Stringstream von einem String -Objekt kann auf zwei Arten durchgeführt werden: Verwenden der Einfügung (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

STRINGSTREAM STRM1 (iOS_Base :: in);
strm1 << "We are the world!";
String stri2 = "Dies ist die Erde!";
STRINGSTREAM STRM2 (iOS_Base :: in);
strm2 << stri2;
STRINGSTREAM STRM3 (iOS_Base :: in);
strm3.STR ("Mars ist der nächste.");
String stri4 = "Was ist mit Jupiter?";
STRINGSTREAM STRM4 (iOS_Base :: in);
strm4.str (STRI4);
Rückkehr 0;

Das String -Objekt kann das buchstäbliche oder die Kennung sein. Beachten Sie, dass in der Deklaration des Sstream -Objekts „Stringsstream“ verwendet wird und nicht „sstream“, obwohl beide Begriffe dasselbe bedeuten. Der Begriff Sstream sollte in der Richtlinie einbezogen werden.

Ausgangsstringstream -Betrieb

Ein Wort ist ein String -Text, der keinen Platz im Inneren hat. Ausgabe aus einem Stringstream bedeutet, ein String -Wort aus dem Sstream -Objekt an ein String -Objekt zu senden. Dies muss den Extraktionsbetreiber (>>) benötigt. Das folgende Programm sendet ein Wort von einem Sstream -Objekt an ein String -Objekt:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream strm;
strm << "love";
String stri = "Hass";
strm >> stri;
Cout << stri << endl;
Rückkehr 0;

Die Ausgabe ist:

Liebe

Jeder String -Wert, den das String -Objekt möglicherweise hatte, wird ersetzt. Wenn der Stringstream oben und ohne Argument deklariert wird, gilt es für Eingabe oder Ausgabe.

Wenn der Stringwert des Stringsstream -Objekts (Puffer) Leerzeichen hat, wird nur das erste Wort gesendet. Die Sstream -Mitgliedsfunktion Str () muss verwendet werden, um den gesamten Stringwert einschließlich der Räume zu senden. STR () kann verwendet werden. Es kann auch verwendet werden, um den gesamten Inhalt des Stream -Puffer, einschließlich der Leerzeichen, an das String -Objekt zurückzugeben. Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream strm;
strm << "I love her, but he hates her.";
String Stri;
stri = strm.str ();
Cout << stri << endl;
Rückkehr 0;

Die Ausgabe ist:

Ich liebe sie, aber er hasst sie.

Senden Sie die ersten Wörter in Variablen

In der Zeichenfolge,

„Ich liebe sie, aber er hasst sie.”

Wenn die ersten 5 Wörter durch die Variablen A, B, C, D, E dargestellt werden sollen, können diese Variablen gemacht werden, um die Wörter zu halten. Der folgende Code zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream 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;
Rückkehr 0;

Die Ausgabe ist:

Ich liebe sie, aber er

Ein einzelnes Zeichen ist ein Wort. Beachten Sie, dass dem Komma „ihr“ verbunden wurde. Wenn das Komma von „ihr“ getrennt worden wäre, wäre es als separates Wort angesehen worden.

Zählen Sie die Anzahl der Wörter in String buchstäblich

Im vorherigen Abschnitt wurden nur die ersten 5 Wörter identifiziert. Um alle Wörter an verschiedene Variablen zu senden, muss die Anzahl der Wörter bekannt sein. Wenn das Problem nur darin besteht. Durch das Senden aller Wörter an eine Variable, während das Zählen der Anzahl der Sendungen und bis zum Ende des Streams (End-of-File). Der folgende Code zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream strm;
strm << "I love her, but he hates her.";
int counter = 0;
String -Temperatur;
während (!strm.eof ())
strm >> temp;
Zähler += 1;

Cout << counter << endl;
Rückkehr 0;

Die Ausgabe ist 7. Der volle Stopp ist dem zweiten „ihr“ befestigt. Beachten Sie, dass der Indikator für das Dateiende die Sstream-Mitgliedsfunktion ist, eof ().

Individuelle Wortfrequenzen

Im Stringwert,

"Ich liebe sie und er liebt ihre Schwester, obwohl er ihren Bruder hasst."

Das Wort „ihr“ tritt dreimal auf, und die Häufigkeit von „ihr“ ist als 3 anzeigen. Das Wort „er“ erscheint zwei Mal, und die Häufigkeit von „er“ soll 2 sein. Der Rest der Wörter hat jeweils eine Frequenz von jeweils 1. Die Häufigkeit jedes Wortes kann wie folgt bestimmt werden:

Haben Sie alle Wörter in einer C ++ - Karte ohne Wiederholung. Betrachten Sie die folgende Erklärung:

MP [Temp] ++;

wobei MP ein Kartenobjekt ist. Das erste Mal, dass diese Anweisung seit einer Weile angetroffen wird, passt sie in ein neues Schlüssel-/Wertpaar, dessen Schlüssel das Zeichenfolgewort der Variablen-Temperatur ist und deren Wert 1 ist. Wenn es das nächste Mal in derselben während der Schleife angetroffen wird, wird der Karte kein neuer Schlüssel-/Wertpaar hinzugefügt. Der Wert dieses Schlüssel-/Wertpaares wird einfach inkrementiert.

Die Strategie besteht also darin, diese Aussage in einer Weile zu haben und alle Wörter im SsStream-Puffer in eine vorübergehende Variable zu lesen. Und jeder Wert für jedes Schlüssel-/Wertpaar in der Karte wird schließlich zur Frequenz des Schlüssels (Wort). Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream strm;
strm << "I love her and he loves her sister, though he hates her brother.";
String -Temperatur;
Karte Abgeordneter;
while (strm >> temp)
MP [Temp] ++;

für (Karte:: iterator it = mp.Start(); Es != MP.Ende(); es ++)
Cout << it->Erste << " => " << it->zweite << endl;
Rückkehr 0;

Die Ausgabe ist:

I => 1
und => 1
Bruder. => 1
hates => 1
er => 2
ihr => 3
love => 1
Loves => 1
Schwester => 1
obwohl => 1

Zeichenfolge zu Nummer und umgekehrt

Zeichenfolge zu Nummer

Um ein String -Wort in eine Nummer zu konvertieren, senden Sie einfach das Stringwort aus dem SSTREAM -Puffer an eine als Nummer deklarierte Variable. Senden Sie das String -Wort an eine int -Variable, um in ein INT konvertiert zu werden. Senden Sie das String -Wort an eine Float -Variable, um in einen Schwimmer konvertiert zu werden. Das folgende Programm zeigt diese:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Stringsstream strm;
strm << " 30 ";
int myint;
strm >> myint;
int intresult = myint + 10;
Cout << intResult << endl;
strm << " 2.5 ";
Myfloat schweben;
strm >> myfloat;
float fltresult = myfloat + 0.3;
Cout << fltResult << endl;
Rückkehr 0;

Die Ausgabe ist:

40
2.8

Nummer zu String

Um eine Nummer in ein Zeichenfolgenwort umzuwandeln, senden Sie einfach die Nummer an den Sstream -Puffer. Lesen Sie dann den Stream -Puffer in ein String -Objekt vor. Um eine INT in eine Zeichenfolge umzuwandeln, senden Sie die Ganzzahl an den Sstream. Senden Sie den Schwimmer zum Sstream, um einen Schwimmer in eine Zeichenfolge umzuwandeln. Das folgende Programm zeigt diese:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

STRINGTREAM STRM1;
int myint = 30;
strm1 << myInt;
String Intstr;
strm1 >> intstr;
String intstrres = intstr + "gut";
Cout << intStrRes << endl;
STRINGTREAM STRM2;
float myflt = 2.5;
strm2 << myflt;
String fltstr;
strm2 >> fltstr;
String fltstrres = fltstr + "yes";
Cout << fltStrRes << endl;
Rückkehr 0;

Die Ausgabe ist:

30 Gut
2.5 Ja

Hier wurden zwei Stream -Objekte für die verschiedenen Zahlentypen verwendet.

Notiz: Die Sstream Puffer besteht nur aus Charakteren.

Abschluss

Stringsstream bedeutet String Stream. Es ist auch geschrieben als Sstream. es ist ein Strom. Das Ziel für diesen Stream ist ein String -Objekt. Der Stream kann den Insertionsoperator verwenden (<>). Der Stream ist für folgende Zwecke sehr hilfreich: Zählen der Anzahl der Wörter in einem String-Objekt, das Erhalten einzelner Wortfrequenzen in einem String-Objekt und Konvertieren eines Wort.