Что такое C++ Stringstream и как его использовать?

Что такое C++ Stringstream и как его использовать Программирование и разработка

Строковый объект, созданный из строкового класса, представляет собой структуру данных списка. Список представляет собой серию персонажей, и он ценится как таковой. Строковый объект C ++ имеет множество методов. Однако в нем отсутствуют определенные операции, которые лучше всего использовать, если рассматривать его как поток. Вот где на помощь приходит stringstream. Stringstream — это поток, который можно использовать для:

— Подсчитайте количество слов в строковом объекте

— Получить частоту отдельных слов в строковом объекте

— Преобразование слова в текстовой форме в строковом объекте в число и наоборот

Перемещение символов из строкового объекта в программу C ++ является вводом и представлено объектом строкового потока. Выводится перемещение символов из программы C ++ в строковый объект. Stringstream (то есть sstream) использует классы istringstream и ostringstream. Объект, созданный из istringstream, отвечает за ввод символов в поток строк. Объект, созданный из ostringstream, отвечает за вывод символов из строкового потока в строковый объект.

В этом руководстве объясняется, что такое sstream и как его использовать. Целевой строковый объект является частью программы C ++.

Чтобы выполнить ввод, вывод или и то, и другое в одном сеансе, программа на C ++ должна начинаться с:

#include <string>

#include <sstream>

#include <iostream>

Создание объекта Stringstream

Известно, что строковый поток может быть объявлен и применен одновременно в одном операторе. Однако в данном руководстве это не тот подход. В этом руководстве объект строкового потока создается из класса в одном операторе и используется в другом операторе.

Stringstream может быть создан для чтения (ввода). Stringstream может быть создан для записи (вывода). Stringstream может быть реализован как для чтения и записи.

Чтобы создать объект потока для чтения, используйте:

    sstream strm (ios_base::in);

где strm — объект потока; а «in» класса ios_base означает чтение.

Чтобы создать объект потока для записи, используйте:

    sstream strm (ios_base::out);

где strm — объект потока; а «вне» класса ios_base означает запись.

Чтобы создать объект потока для чтения или записи, используйте:

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

где «ios_base :: in | ios_base :: out », предназначен для чтения или записи.

Входная операция Stringstream

Текст для ввода в строковый поток из строкового объекта может быть выполнен двумя способами: с помощью оператора вставки (<<) или с помощью функции-члена str () класса sstream. Следующая программа иллюстрирует это для обоих способов:

#include <string>

#include <sstream>

#include <iostream>

using namespace std;

int main()

{

stringstream strm1(ios_base::in);

strm1 << «We are the world!»;

string stri2 = «This is the earth!»;

stringstream strm2(ios_base::in);

strm2 << stri2;

stringstream strm3(ios_base::in);

strm3.str(«Mars is next.»);

string stri4 = «What about Jupiter?»;

stringstream strm4(ios_base::in);

strm4.str(stri4);

return 0;

}

Строковый объект может быть литералом или идентификатором. Обратите внимание, что в объявлении объекта sstream используется «stringstream», а не «sstream», хотя оба термина означают одно и то же. В директиве include следует использовать термин sstream.

Выходная операция Stringstream

Слово — это любой строковый текст, в котором нет пробела (’’). Вывод из строкового потока означает отправку строкового слова из объекта sstream в строковый объект. Для этого нужен оператор извлечения (>>). Следующая программа отправляет слово из объекта sstream в строковый объект:

#include <string>

#include <sstream>

#include <iostream>

using namespace std;

int main()

{

stringstream strm;

strm << «love»;

string stri = «hate»;

strm >> stri;

cout << stri << endl;

return 0;

}

Результат:

    love

Любое строковое значение, которое могло быть у строкового объекта, заменяется. Если поток строк объявлен выше и без каких-либо аргументов, то он предназначен для ввода или вывода.

Если в строковом значении объекта строкового потока (буфера) есть пробелы, то будет отправлено только первое слово. Функция-член sstream, str (), должна использоваться для отправки всего строкового значения, включая пробелы. Str () может использоваться для преобразования строкового литерала в содержимое sstream. Его также можно использовать для возврата всего содержимого буфера потока, включая пробелы, в строковый объект. Следующая программа иллюстрирует это:

    #include <string>

#include <sstream>

#include <iostream>

using namespace std;

int main()

{

stringstream strm;

strm << «I love her, but he hates her.»;

string stri;

stri = strm.str();

cout << stri << endl;

return 0;

}

Результат:

I love her, but he hates her.

Отправка первых нескольких слов в переменные

В строке

«Я люблю ее, но он ее ненавидит».

Если первые 5 слов должны быть представлены переменными a, b, c, d, e, то эти переменные можно сделать так, чтобы они содержали слова. Следующий код иллюстрирует это:

#include <string>

#include <sstream>

#include <iostream>

using namespace 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;

return 0;

}

Результат:

I love her, but he

Отдельный символ — это слово. Обратите внимание, что запятая была соединена со словом «она». Если бы запятая была отделена от «ее», то это считалось бы отдельным словом.

Подсчет количества слов в строковом литерале

В предыдущем разделе были идентифицированы только первые 5 слов. Чтобы передать все слова в разные переменные, необходимо знать количество слов. Если проблема заключается только в том, чтобы узнать количество слов в буфере sstream, то это можно сделать в цикле while. Он заключается в отправке всех слов в одну переменную, при подсчете количества раз, когда выполняется отправка, и до тех пор, пока не будет достигнут конец потока (конец файла). Следующий код иллюстрирует это:

#include <string>

#include <sstream>

#include <iostream>

using namespace std;

int main()

{

stringstream strm;

strm << «I love her, but he hates her.»;

int counter = 0;

string temp;

while (!strm.eof()) {

strm >> temp;

counter += 1;

}

cout << counter << endl;

return 0;

}

Выход 7. Точка ставится на второй «ней». Обратите внимание, что индикатором конца файла является функция-член sstream, eof ().

Частоты отдельных слов

В строковом значении

«I love her, and he loves her sister, though he hates her brother.»

Слово «она» встречается 3 раза, и частота «ее» указывается равной 3. Слово «он» встречается 2 раза, а частота «он», как говорят, равна 2. слова имеют частоту 1 каждое. Частоту каждого слова можно определить следующим образом:

Имейте все слова на карте C ++ без повторения. Рассмотрим следующее утверждение:

mp[temp]++;

где mp — объект карты. В первый раз, когда этот оператор встречается в цикле while, он вписывается в новую пару ключ / значение, ключ которой является строковым словом переменной temp, а значение равно 1. В следующий раз, когда он встречается в том же цикле while- цикл, с этим конкретным ключом на карту не добавляется новая пара ключ / значение. Значение этой пары ключ / значение просто увеличивается.

Итак, стратегия состоит в том, чтобы этот оператор находился в цикле while, а все слова в буфере ssstream считывались во временную переменную. И каждое значение для каждой пары ключ / значение на карте, наконец, становится частотой ключа (слова). Следующая программа иллюстрирует это:

#include <string>

#include <sstream>

#include <map>

#include <iostream>

using namespace std;

int main()

{

stringstream strm;

strm << «I love her and he loves her sister, though he hates her brother.»;

string temp;

map<string, int> mp;

while (strm >> temp) {

mp[temp]++ ;

}

for (map<string, int>::iterator it = mp.begin(); it != mp.end(); it++)

cout << it>first << » => « << it>second << endl;

return 0;

}

Результат:

=> 1

and => 1

brother. => 1

hates => 1

he => 2

her => 3

love => 1

loves => 1

sister, => 1

though => 1

Строка в число и наоборот

Строка в число

Чтобы преобразовать строковое слово в число, просто отправьте строковое слово из буфера sstrream в переменную, объявленную как число. Чтобы преобразовать в int, отправьте строковое слово в переменную типа int. Чтобы преобразовать в число с плавающей запятой, отправьте строковое слово в переменную с плавающей запятой. Следующая программа иллюстрирует это:

#include <string>

#include <sstream>

#include <iostream>

using namespace 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;

return 0;

}

Результат:

40

2.8

Число в строку

Чтобы преобразовать число в строковое слово, просто отправьте число в буфер sstream. Затем считайте буфер потока в строковый объект. Чтобы преобразовать int в строку, отправьте целое число в поток sstream. Чтобы преобразовать число с плавающей запятой в строку, отправьте его в поток sstream. Следующая программа иллюстрирует это:

#include <string>

#include <sstream>

#include <iostream>

using namespace 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 + » yes»;

cout << fltStrRes << endl;

return 0;

}

Результат:

30 good

2.5 yes

Здесь используются два объекта потока для разных числовых типов.

Примечание : буфер sstream состоит только из символов.

Заключение

Stringstream означает String Stream. Он также записывается как sstream. Это ручей. Целью этого потока является строковый объект. В потоке можно использовать оператор вставки (<<) и оператор извлечения (>>). Поток очень полезен для следующих целей: подсчет количества слов в строковом объекте, получение частот отдельных слов в строковом объекте и преобразование слова в текстовой форме в строковом объекте в число и наоборот.

 

Читайте также:  Как я могу увидеть изменения каталога в Python?
Оцените статью
bestprogrammer.ru
Добавить комментарий