Класс stringstream в C++

Пример использования класса stringstreamКласс stringstream в C++ позволяет рассматривать строковый объект как поток. Он используется для работы со строками. Рассматривая строки как потоки, мы можем выполнять операции извлечения и вставки из/в строку так же, как потоки cin и cout.

Эти типы операций в основном полезны для преобразования строк в числовые типы данных и наоборот. Класс stringstream также оказывается полезным в различных типах синтаксического анализа.

Класс stringstream

Графически класс stringstream можно представить следующим образом:

Класс stringstream

Вы можете видеть, где класс stringstream появляется на диаграмме ios. Этот класс является производным от класса iostream. Объекты класса stringstream используют строковый буфер, содержащий последовательность символов. К этому буферу можно обращаться напрямую как к строковому объекту.

Для этой цели мы можем использовать элемент str строкового потока. Чтобы использовать класс stringstream в программе C++, мы должны использовать заголовок <sstream>.

Например, код для извлечения целого числа из строки будет таким:

string mystr(“2022”);
int myInt;
stringstream (mystr)>>myInt;

Здесь мы объявляем строковый объект со значением «2022» и целочисленный объект «myInt». Затем мы используем конструктор класса stringstream для создания объекта stringstream из объекта string. После, с помощью оператора извлечения (>>) значение извлекается в myInt. Из приведенного выше кода значение myInt будет 2022.

Давайте рассмотрим различные операции класса stringstream.

Операции вставки и извлечения с использованием stringstream

Теперь мы покажем, как вставить данные в поток строк и как получить данные из потока строк, то есть операцию извлечения класса потока строк.

Читать также:  Ссылки в С++

1) Операция вставки

Чтобы вставить данные в строковый поток, мы можем использовать два метода:

Использование оператора вставки (<<)

Имея объект stringstream ss, мы можем присвоить данные буферу ss следующим образом, используя оператор <<.

stringstream ss;
ss<< “hello,world!!”;

Здесь мы вставили «hello,world!!» в stringstream ss.

Использование функции str(string)

Мы также можем использовать функцию str для присвоения данных буферу строкового потока. Функция str принимает строку данных в качестве аргумента и присваивает эти данные объекту stringstream.

stringstream ss;
ss.str(“Hello,World!!”);

2) Операция извлечения

Также есть два метода для получения данных из строкового потока или для операции извлечения:

Использование функции str()

Мы можем использовать функцию str() для получения данных из строкового потока следующим образом:

stringstream ss;
ss<<”Hello,World”;
cout<<ss.str();

Использование оператора извлечения (>>)

Мы можем использовать оператор извлечения для отображения данных строкового потока следующим образом:

Stringstream ss;
ss<< “stringstream”;
string str;
ss>>str;

В соответствии с приведенным выше кодом переменная str будет иметь значение объекта ss в результате действия оператора извлечения.

Ниже приведена полная программа, демонстрирующая использование операций вставки и извлечения класса stringstream:

Вывод данных:

Monitor BankRu
10/07/2022

В приведенной выше программе мы сначала показали методы вставки, т.е. оператор << и функцию str(string), которая считывает строку в stringstream.

Далее мы показали работу методов извлечения, которые представляют собой функцию str(), извлекающую данные из потока строк, и оператор >>.

Читать также:  Стеки и очереди в STL

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

Следовательно, в приведенной выше программе нам нужны три строковые переменные, чтобы получить все данные объекта строкового потока.

Применение stringstream в C++

Вот где мы можем найти применение класса stringstream:

1) Преобразование между строками и числами

Операторы вставки и извлечения строкового потока работают со всеми основными типами данных. Следовательно, мы можем использовать их для преобразования строк в числовые типы и наоборот.

Полная программа преобразования между строками и числами приведена ниже:

Вывод данных:

The numeric values converted to string:
myStrl = 2022 myStr2 = 3.142
The string values converted to numeric types:
nIntval = 2022 nDoubleval = 3.142

Во-первых, мы преобразовали числовые значения в строковые значения. Затем мы преобразуем числовые строковые значения в числовые значения.

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

Мы можем использовать класс stringstream для подсчета количества слов в строке. Полная программа представлена ​​ниже:

Вывод данных:

Number of words in given string are: 10

Чтобы подсчитать количество слов в заданной строке, мы сначала преобразуем ее в объект stringstream. Затем мы подсчитываем каждое слово, используя оператор извлечения (поскольку он останавливается на каждом пробеле) в цикле. Наконец, мы печатаем значение общего количества слов.

Читать также:  Операторы C++, типы и примеры

3) Вывод частотности слов в строке

Следующим применением stringstream в C++ является вывод частотности различных слов в заданной строке. Это означает, что мы будем видеть, сколько раз конкретное слово встречается в данной строке.

Для этого мы сохранили структуру карты, которая будет иметь пару ключ-значение с каждым словом в строке в качестве ключа, а его соответствующее значение — это частота этого конкретного слова.

Полная программа C++ показана ниже:

Вывод данных:

We -> 1
are -> 1
glad -> 1
to -> 2
welcome ->
the -> 1
you -> 1
MonitorBank -> 1
website -> 1

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

Итог

Класс Stringstream используется для вставки и извлечения данных в/из строковых объектов. Он действует как поток для строкового объекта. Класс stringstream подобен потокам cin и cout, за исключением того, что у него нет канала ввода-вывода.

Мы обсудили различные операции класса stringstream, а также несколько примеров его применения в программировании.

В нашей следующей статье мы подробно обсудим несколько функций заголовка IOMANIP для управления выводом программ C++, таких как setprecision и setw.

С Уважением, МониторБанк

Добавить комментарий