Co to jest C ++ StringSstream i jak z niego korzystać?

Co to jest C ++ StringSstream i jak z niego korzystać?

Obiekt ciągu utworzony z klasy ciągów to struktura danych listy. Lista jest serią postaci i jest doceniana jako taka. Obiekt ciągów C ++ ma wiele metod. Jednak brakuje mu pewnych operacji, które są najlepiej oferowane, jeśli są postrzegane jako strumień. To jest gdzie Stringstream wchodzi. Stringstream to strumień, do którego można użyć:

- Policz liczbę słów w obiekcie ciągu

- Uzyskaj poszczególne częstotliwości słów w obiekcie ciągu

- Konwertuj słowo w formularzu tekstowym w obiekcie ciągów na liczbę i odwrotnie

Poruszające znaki z obiektu ciągów do programu C ++ jest wprowadzane i reprezentowane przez Stringstream obiekt. Poruszanie znaków z programu C ++ do obiektu String jest wyświetlane. Stringstream (ja.mi. sstream) używa IstringStream I OstringStream zajęcia. Obiekt utworzony z IstringStream jest odpowiedzialny za wprowadzenie znaków do Stringstream. Obiekt utworzony z OstringStream jest odpowiedzialny za wyświetlanie znaków z Stringstream do obiektu String.

Ten samouczek wyjaśnia, co sstream jest i jak go używać. Docelowe obiekt ciągów jest częścią programu C ++.

Aby wykonać wejście, wyjście lub obie, w jednej sesji, program C ++ powinien zacząć od:

#włączać
#włączać
#włączać

Treść artykułu

  • Tworzenie obiektu StringSstream
  • Operacja Stringsstream Stringsstream
  • Operacja Stringsstream
  • Wysyłanie kilku pierwszych słów do zmiennych
  • Liczenie liczby słów w dosłownym ciągu
  • Poszczególne częstotliwości słów
  • Ciąg do liczby i odwrotnie
  • Wniosek

Tworzenie obiektu StringSstream

Wiadomo, że Stringstream można zadeklarować i zastosować jednocześnie w jednym stwierdzeniu. Jednak nie jest to podejście w tym samouczku. W tym samouczku a Stringstream Obiekt jest utworzony z klasy w jednym instrukcji i używany w innej instrukcji.

A Stringstream Można utworzyć instancję do odczytu (wprowadzanie). A Stringstream Można utworzyć instancję do pisania (wyjście). A Stringstream Można utworzyć instancję zarówno do czytania, jak i pisania.

Aby utworzyć obiekt Stream do czytania, użyj:

Sstream STRM (ios_base :: in);

gdzie STRM jest obiektem strumienia; i „w” klasy iOS_Base oznacza do czytania.

Aby utworzyć obiekt strumieniowy do pisania, użyj:

Sstream STRM (iOS_BASE :: OUT);

gdzie STRM jest obiektem strumienia; i „poza” klasy iOS_Base oznacza pisanie.

Aby utworzyć obiekt strumieniowy do czytania lub pisania, użyj:

Sstream STRM (ios_base :: in | ios_base :: out);

gdzie „ios_base :: in | iOS_BASE :: OUT ”, służy do czytania lub pisania.

Operacja Stringsstream Stringsstream

Tekst do wejścia do strumienia strunowego z obiektu stringowego można wykonać na dwa sposoby: za pomocą wstawienia (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

stringstream strm1 (ios_base :: in);
STRM1 << "We are the world!";
String stri2 = "To jest ziemia!";
stringstream strm2 (ios_base :: in);
STRM2 << stri2;
stringstream strm3 (ios_base :: in);
STRM3.Str („Mars jest następny.");
String Stri4 = "A co z Jowisz?";
stringstream strm4 (ios_base :: in);
STRM4.str (stri4);
powrót 0;

Obiekt ciągów może być dosłownym lub identyfikatorem. Zauważ, że w deklaracji obiektu Sstream używany jest „stringstream”, a nie „sstream”, choć oba terminy oznaczają to samo. Termin sstream powinien być używany w dyrektywie przywzględniającej.

Operacja Stringsstream

Słowo to dowolny tekst, który nie ma żadnej przestrzeni (”). Wyświetlanie z StringSstream oznacza wysłanie słowa z obiektu Sstream do obiektu String. Wymaga to operatora ekstrakcji (>>). Poniższy program wysyła słowo z obiektu Sstream do obiektu String:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM;
Strm << "love";
String stri = „nienawiść”;
strm >> stri;
Cout << stri << endl;
powrót 0;

Wyjście to:

Miłość

Każda wartość ciągu, jaką mógł mieć obiekt łańcuchowy, został wymieniony. Jeśli StringStream jest zadeklarowany powyżej i bez żadnego argumentu, jest ono dla danych wejściowych lub wyjściowych.

Jeśli wartość ciągu obiektu StringStream (bufor) ma przestrzenie, to tylko pierwsze słowo zostanie wysłane. Funkcja elementu Sstream, str (), musi być używana do wysyłania całej wartości łańcucha, w tym przestrzeni. Str () można użyć do konwersji literału ciągów na zawartość sstream. Można go również użyć do zwrócenia całej zawartości bufora strumieniowego, w tym przestrzeni, do obiektu String. Poniższy program ilustruje to:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM;
Strm << "I love her, but he hates her.";
Stri stri;
stri = strm.str ();
Cout << stri << endl;
powrót 0;

Wyjście to:

Kocham ją, ale on ją nienawidzi.

Wysyłanie kilku pierwszych słów do zmiennych

W ciągu,

„Kocham ją, ale on ją nienawidzi."

Jeśli pierwsze 5 słów ma być reprezentowane przez zmienne, a, b, c, d, e, wówczas zmienne te można wytrzymać słowa. Poniższy kod to ilustruje:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw 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;
powrót 0;

Wyjście to:

Kocham ją, ale on

Pojedynczy znak to słowo. Zauważ, że przecinek został połączony z „nią”. Gdyby przecinek został oddzielony od „jej”, byłoby to uznane za osobne słowo.

Liczenie liczby słów w dosłownym ciągu

W poprzedniej sekcji zidentyfikowano tylko pierwsze 5 słów. Aby wysłać wszystkie słowa do różnych zmiennych, liczba słów musi być znana. Jeśli problemem jest po prostu poznanie liczby słów w buforze sstream, to można to zrobić za. Wysyłając wszystkie słowa do jednej zmiennej, jednocześnie licząc liczbę wysyłania, a do końca strumienia (koniec pliku). Poniższy kod to ilustruje:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM;
Strm << "I love her, but he hates her.";
int licznik = 0;
Temperatura ciągu;
chwila (!Strm.eof ())
strm >> temp;
licznik += 1;

Cout << counter << endl;
powrót 0;

Wyjście to 7. Pełny przystanek jest przymocowany do drugiego „jej”. Należy zauważyć, że wskaźnikiem końca pliku jest funkcja elementu Sstream, eof ().

Poszczególne częstotliwości słów

W wartości ciągu,

„Kocham ją, a on kocha jej siostrę, choć nienawidzi jej brata."

Słowo „ona” występuje 3 razy, a częstotliwość „jej” jest wskazana na 3. Słowo „on” pojawia się 2 razy, a częstotliwość „on” mówi się, że wynosi 2. Reszta słów ma częstotliwość 1 każda. Częstotliwość każdego słowa można określić w następujący sposób:

Mają wszystkie słowa na mapie C ++ bez powtórzenia. Rozważ następujące stwierdzenie:

MP [TEMP] ++;

gdzie MP jest obiektem mapy. Po raz pierwszy to stwierdzenie jest napotkane w pętli, która pasuje do nowej pary klucza/wartości, której kluczem jest słowo o zmiennej temperaturze i którego wartość wynosi 1. Następnym razem, gdy zostanie napotkane w tej samej pętli, z tym konkretnym kluczem, do mapy nie dodaje się nowej pary/wartości. Wartość tej pary klucza/wartości jest po prostu zwiększana.

Tak więc strategią jest posiadanie tego stwierdzenia w pewnej pętli, a wszystkie słowa w buforze SSStream są odczytywane do zmiennej tymczasowej. I każda wartość dla każdej pary klucza/wartości na mapie wreszcie staje się częstotliwością klucza (słowo). Poniższy program ilustruje to:

#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM;
Strm << "I love her and he loves her sister, though he hates her brother.";
Temperatura ciągu;
mapa poseł;
while (strm >> temp)
MP [TEMP] ++;

dla (mapa:: iterator it = mp.zaczynać(); To != MP.koniec(); it ++)
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0;

Wyjście to:

I => 1
i => 1
brat. => 1
nienawidzi => 1
on => 2
ona => 3
miłość => 1
Loves => 1
siostra, => 1
Chociaż => 1

Ciąg do liczby i odwrotnie

Ciąg do liczby

Aby przekonwertować słowo ciąg na numer, po prostu wyślij słowo łańcuchowe z bufora sstream na zmienną zadeklarowaną jako liczbę. Aby przekonwertować na INT, wyślij słowo string do zmiennej int. Aby przekonwertować na pływak, wyślij słowo string do zmiennej zmiennoprzecinkowej. Poniższy program ilustruje je:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM;
Strm << " 30 ";
int myint;
strm >> myint;
int intresult = myint + 10;
Cout << intResult << endl;
Strm << " 2.5 ";
pływać myfloat;
strm >> myfloat;
float fltresult = myfloat + 0.3;
Cout << fltResult << endl;
powrót 0;

Wyjście to:

40
2.8

Liczba do ciągu

Aby przekonwertować numer na słowo ciąg, po prostu wyślij numer do bufora sstream. Następnie odczyt bufor strumienia w obiekcie ciągów. Aby przekonwertować Int na ciąg, wysłał liczbę całkowitą do sstream. Aby przekonwertować pływak na ciąg, wyślij float do sstream. Poniższy program ilustruje je:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Stringstream STRM1;
int myint = 30;
STRM1 << myInt;
String intstr;
strm1 >> intstr;
String intstrres = intstr + „Good”;
Cout << intStrRes << endl;
Stringstream STRM2;
float myflt = 2.5;
STRM2 << myflt;
String FltStr;
STRM2 >> FLTSTR;
String fltStrres = fltStr + „tak”;
Cout << fltStrRes << endl;
powrót 0;

Wyjście to:

30 Dobry
2.5 Tak

Dwa obiekty strumieniowe zostały tutaj użyte dla różnych typów liczb.

Notatka: sstream Bufor składa się tylko z postaci.

Wniosek

Stringstream oznacza Strumień ciągu. Jest również napisany jako sstream. To jest strumień. Celem tego strumienia jest obiekt ciąg. Strumień może użyć operatora insercji (<>). Strumień jest bardzo pomocny do następujących celów: liczenie liczby słów w obiekcie ciągów, uzyskiwanie poszczególnych częstotliwości słów w obiekcie ciągów i przekształcanie słowa w formularzu tekstowym w obiekcie ciągów i odwrotnie.