Hva er C ++ StringStream, og hvordan du bruker det?

Hva er C ++ StringStream, og hvordan du bruker det?

Et strengobjekt innstilt fra strengklassen er en listedatastruktur. Listen er en serie karakterer, og den blir verdsatt som sådan. C ++ strengobjektet har mange metoder. Imidlertid mangler det visse operasjoner, som tilbys best hvis det blir sett på som en strøm. Det er der StringStream kommer inn. StringStream er en strøm, som kan brukes til:

- Tell antall ord i et strengobjekt

- Få individuelle ordfrekvenser i et strengobjekt

- Konverter et ord i tekstform i strengobjektet til et tall, og omvendt

Å flytte tegn fra strengobjektet til C ++ -programmet er å legge inn og representert av StringStream gjenstand. Å flytte tegn fra C ++ -programmet til strengobjektet er utsnitt. StringStream (i.e. Sstream) bruker IstringStream og OstringStream klasser. Et objekt oppstart fra IstringStream er ansvarlig for å legge inn tegn til en StringStream. Et objekt oppstart fra OstringStream er ansvarlig for å sende ut karakterer fra en StringStream til et strengobjekt.

Denne opplæringen forklarer hva Sstream er og hvordan du bruker den. Målstrengobjektet er en del av C ++ -programmet.

For å kunne gjøre input, output eller begge deler, i en økt, bør C ++ -programmet begynne med:

#inkludere
#inkludere
#inkludere

Artikkelinnhold

  • Opprette et StringStream -objekt
  • Inngangsstrømoperasjon
  • Output StringStream Operation
  • Sender de første ordene til variabler
  • Teller antall ord i streng bokstavelig
  • Individuelle ordfrekvenser
  • Streng til nummer og omvendt
  • Konklusjon

Opprette et StringStream -objekt

Det er kjent at StringStream kan erklæres og brukes samtidig i en uttalelse. Det er imidlertid ikke tilnærmingen i denne opplæringen. I denne opplæringen, a StringStream Objektet blir instantiert fra en klasse i en uttalelse og brukes i en annen uttalelse.

EN StringStream kan bli instantiert for lesing (innspill). EN StringStream kan bli instantiert for skriving (ut av). EN StringStream kan bli instantiert for både lesing og skriving.

For å lage et strømobjekt for lesing, bruk:

sstream strm (ios_base :: in);

der STRM er strømobjektet; og "i" av iOS_Base -klassen betyr for lesing.

For å lage et strømobjekt for skriving, bruk:

Sstream strm (ios_base :: out);

der STRM er strømobjektet; og "ut" av iOS_base -klassen betyr for å skrive.

For å lage et strømobjekt for lesing eller skriving, bruk:

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

hvor “ios_base :: in | ios_base :: out ”, er for lesing eller skriving.

Inngangsstrømoperasjon

Tekst for å legge inn et strengstrøm fra et strengobjekt kan gjøres på to måter: Bruke innsetting (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm1 (ios_base :: in);
STRM1 << "We are the world!";
streng stri2 = "dette er jorden!";
StringStream strm2 (ios_base :: in);
strm2 << stri2;
StringStream strm3 (ios_base :: in);
strm3.STR ("Mars er neste.");
String stri4 = "Hva med Jupiter?";
StringStream strm4 (ios_base :: in);
strm4.Str (Stri4);
retur 0;

Strengobjektet kan være bokstavelig eller identifikatoren. Merk at i erklæringen om Sstream -objektet brukes "StringStream" og ikke "Sstream", selv om begge begrepene betyr det samme. Begrepet Sstream bør brukes i Inkluder -direktivet.

Output StringStream Operation

Et ord er hvilken som helst strengtekst som ikke har noe rom (") innen. Å sende ut fra et StringStream betyr å sende et strengord fra Sstream -objektet til et strengobjekt. Dette trenger utvinningsoperatøren (>>). Følgende program sender et ord fra et Sstream -objekt til et strengobjekt:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << "love";
String stri = "hat";
strm >> Stri;
cout << stri << endl;
retur 0;

Utgangen er:

kjærlighet

Enhver strengverdi som strengobjektet kan ha hatt erstattet. Hvis StringStream er erklært ovenfor og uten noe argument, er det for inngang eller utgang.

Hvis strengverdien til StringStream -objektet (buffer) har mellomrom, vil bare det første ordet bli sendt. Sstream -medlemsfunksjonen, Str (), må brukes til å sende hele strengverdien, inkludert mellomrom. Str () kan brukes til å konvertere en streng bokstavelig til Sstream -innholdet. Det kan også brukes til å returnere alt innholdet i strømbufferen, inkludert mellomrom, til strengobjektet. Følgende program illustrerer dette:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << "I love her, but he hates her.";
streng stri;
Stri = strm.str ();
cout << stri << endl;
retur 0;

Utgangen er:

Jeg elsker henne, men han hater henne.

Sender de første ordene til variabler

I strengen,

“Jeg elsker henne, men han hater henne.”

Hvis de første 5 ordene skal representeres av variablene, a, b, c, d, e, kan disse variablene lages for å holde ordene. Følgende kode illustrerer dette:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << "I love her, but he hates her.";
streng A, B, C, D, E;
strm >> a >> b >> c >> d >> e;
cout << a << " << b << " << c << " << d << " << e << endl;
retur 0;

Utgangen er:

Jeg elsker henne, men han

En enkelt karakter er et ord. Merk at komma har blitt sammen med “henne”. Hvis komma hadde blitt skilt fra “henne”, ville det blitt betraktet som et eget ord.

Teller antall ord i streng bokstavelig

I forrige seksjon ble bare de første 5 ordene identifisert. For å sende alle ordene til forskjellige variabler, må antallet ord være kjent. Hvis problemet bare er å vite antall ord i Sstream-bufferen, kan det gjøres i en stund-loop. Det er ved å sende alle ordene til en variabel, samtidig. Følgende kode illustrerer dette:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << "I love her, but he hates her.";
int teller = 0;
streng temp;
samtidig som (!strm.eof ())
strm >> temp;
teller += 1;

cout << counter << endl;
retur 0;

Utgangen er 7. Full stopp er knyttet til den andre “henne”. Legg merke til at indikatoren for slutten av filen er Sstream-medlemsfunksjonen, EOF ().

Individuelle ordfrekvenser

I strengverdien,

"Jeg elsker henne, og han elsker søsteren hennes, selv om han hater broren hennes.""

Ordet “henne”, forekommer 3 ganger, og hyppigheten av “henne” er indikert å være 3. Ordet “han” vises 2 ganger, og hyppigheten av “han” sies å være 2. Resten av ordene har en frekvens på 1 hver. Hyppigheten til hvert ord kan bestemmes som følger:

Ha alle ordene på et C ++ -kart uten repetisjon. Tenk på følgende uttalelse:

MP [temp] ++;

Hvor MP er et kartobjekt. Første gang denne uttalelsen oppstår i en stund-loop, passer den i et nytt nøkkel/verdipar, hvis nøkkel er strengordet til variabel temp og hvis verdi er 1. Neste gang det oppstår i samme mens-loop, med denne nøkkelen, legges ingen nye nøkkel-/verdipar på kartet. Verdien av dette nøkkelen/verdiparet øker ganske enkelt.

Så strategien er å ha denne uttalelsen i en stug-loop og alle ordene i SSstream-bufferen som blir lest inn i en midlertidig variabel. Og hver verdi for hvert nøkkel/verdipar på kartet blir endelig hyppigheten av nøkkelen (ord). Følgende program illustrerer dette:

#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << "I love her and he loves her sister, though he hates her brother.";
streng temp;
kart MP;
mens (strm >> temp)
MP [temp] ++;

for (kart:: iterator it = mp.begynne(); den != MP.slutt(); det ++)
cout << it->først << " => "" << it->sekund << endl;
retur 0;

Utgangen er:

I => 1
og => 1
bror. => 1
hater => 1
han => 2
Hennes => 3
kjærlighet => 1
elsker => 1
søster, => 1
Skjønt => 1

Streng til nummer og omvendt

Streng til nummer

For å konvertere et strengord til et tall, bare send strengordet fra Sstrream -bufferen til en variabel erklært som et tall. For å konvertere til en int, send strengordet til en int -variabel. For å konvertere til en flottør, send strengordet til en float -variabel. Følgende program illustrerer disse:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm;
strm << " 30 ";
int myint;
strm >> myint;
int intresult = myint + 10;
cout << intResult << endl;
strm << " 2.5 ";
float myfloat;
strm >> myfloat;
FLOAT FLTRESULT = MYFLOAT + 0.3;
cout << fltResult << endl;
retur 0;

Utgangen er:

40
2.8

Nummer til streng

For å konvertere et tall til et strengord, bare send nummeret til Sstream -bufferen. Les deretter ut strømbufferen inn i et strengobjekt. For å konvertere en int til en streng, send helt innledningen til Sstream. For å konvertere en flottør til en streng, send flottøren til Sstream. Følgende program illustrerer disse:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

StringStream strm1;
int myint = 30;
STRM1 << myInt;
streng intstr;
strm1 >> intstr;
streng intstrre = intstr + "bra";
cout << intStrRes << endl;
StringStream strm2;
float myflt = 2.5;
strm2 << myflt;
streng fltstr;
strm2 >> fltstr;
String fltstrres = fltstr + "ja";
cout << fltStrRes << endl;
retur 0;

Utgangen er:

30 Bra
2.5 Ja

To strømobjekter har blitt brukt her for de forskjellige talltypene.

Merk: Sstream Buffer består bare av tegn.

Konklusjon

StringStream midler Strengstrøm. Det er også skrevet som Sstream. Det er en strøm. Målet for denne strømmen er et strengobjekt. Strømmen kan bruke innsettingsoperatøren (<>). Strømmen er veldig nyttig for følgende formål: å telle antall ord i et strengobjekt, få individuelle ordfrekvenser i et strengobjekt, og konvertere et ord i tekstform i strengobjektet til et tall, og omvendt.