Урок №210. Потоковые классы и Строки

  Юрий Ворон  | 

    | 

  Обновл. 26 Янв 2019  | 

 497

 ǀ   1 

В Стандартной библиотеке С++ есть отдельный набор классов, которые позволяют использовать уже знакомые нам операторы вставки (<<) и извлечения (>>) со строками. Как и istream и ostream, потоковые классы для строк предоставляют буфер для хранения данных. Однако, в отличие от cin и cout, эти потоковые классы не подключены к каналу ввода/вывода (т.е. к клавиатуре, монитору и т.д.).

Есть 6 потоковых классов, которые используются для чтения и записи строк:

   istringstream (является дочерним классу istream);

   ostringstream (является дочерним классу ostream);

   stringstream (является дочерним классу iostream);

   wistringstream;

   wostringstream;

   wstringstream.

Чтобы использовать stringstream, нужно #include заголовочный файл sstream.

Чтобы занести данные в stringstream мы можем использовать оператор вставки (<<):

Либо функцию str(string):

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

Результат:

336000 12.14

Либо оператор извлечения (>>):

Результат:

336000 and 12.14

Обратите внимание, оператор извлечения (>>) перебирает буфер данных по значению, учитывая пробелы между ними (т.е. одно использование оператора извлечения (>>) = одно значение из буфера). В то время, как str() возвращает все данные из потока (не частично, а полностью), даже если перед ним использовался оператор извлечения.

Конвертация строк в числа и наоборот

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

Например, конвертация чисел в строки:

Результат:

336000 12.14

А теперь конвертация (числовой) строки обратно в числа:

Результат:

336000 12.14

Очистка stringstream для повторного использования


Есть несколько способов очистить буфер stringstream:

1. Использовать функцию str() с пустой строкой C-style:

2. Использовать str() с пустым объектом std::string:

Результат выполнения программ выше:

World!

При очистке stringstream неплохой идеей является вызов функции clear():

clear() сбрасывает все флаги ошибок, которые были установлены, и возвращает поток обратно в его прежнее (без ошибок) состояние. Мы поговорим подробнее о состояниях потока и флагах ошибок в следующем уроке.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 1

  1. Галина:

    Спасибо! Класс! Умничка! Доходчиво.

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

Ваш E-mail не будет опубликован. Обязательные поля помечены *