- •А. В. Кибардин
- •Оглавление
- •Введение
- •Классы Описание класса
- •Описание объектов
- •Указательthis
- •Конструкторы
- •Конструктор копирования
- •Конструктор копирования для класса monstr:
- •Статические элементы класса
- •Статические поля
- •Статические методы
- •Дружественные функции и классы Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Наследование Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Виртуальные методы и механизм позднего связывания
- •Абстрактные классы
- •Обработка исключительных ситуаций
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •Стандартная библиотека
- •Потоковые классы
- •Стандартные потоки
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Ошибки потоков
- •Файловые потоки
- •Строковые потоки
- •Конструкторы и присваивание строк
- •Операции
- •Функции Присваивание и добавление частей строк
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •Контейнерные классы
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •Приложение 1. Шаблоны функций
- •Приложение 2. Шаблоны классов
- •Библиографический список
- •В трех частях
Строковые потоки
Строковые потоки позволяют считывать и записывать информацию из областей оперативной памяти так же, как и из файла, с консоли или на дисплей. В стандартной библиотеке определено три класса строковых потоков:
istringstream – входные строковые потоки;
ostringstream – выходные строковые потоки;
stringstream – двунаправленные строковые потоки.
Эти классы определены в заголовочном файле <sstream> и являются производными от классов istream, ostream и iostream соответственно.
Участки памяти, с которыми выполняются операции чтения и извлечения, по стандарту определяются как строки С++ (класс string). Строковый класс будет рассмотрен далее. Строковые потоки создаются и связываются с этими участками памяти с помощью конструкторов:
explicit istringstream (int mode = ios :: in);
explicit istringstream (const string & name, int mode = ios :: in);
explicit ostringstream (int mode = ios :: out);
explicit ostringstream (const string & name, int mode = ios :: out);
explicit stringstream (int mode = ios :: in | ios :: out);
explicit stringstream (const string & name, int mode = ios :: in | ios :: out);
Здесь слово explicit указывает на то, что эти конструкторы вызываются только явным образом.
В строковых потоках описан метод str, возвращаюший копию строки или устанавливающий ее значение:
string str ( ) const;
void str (const string & S);
Пример. Строковый поток используется для формирования сообщения, включающего текущее время и передаваемый в качестве параметра номер:
# include <sstream>
# include <string>
# include <iostream>
# include <ctime>
using namespace std;
string message (int i) {
ostringstream os;
time_t t;
time (&t); // Функция возвращает текущие дату и время в виде time_t
os << "time: " << ctime (&t) <<"number: " << i << endl;
return os.str ( );
// Функция ctime () превращает время
// в строку
}
int main ( ) {
cout << message (22);
return 0;}
Строки
С++ не содержит стандартного типа данных «строка». Вместо этого он поддерживает массивы символов, завершающиеся нуль-символом. Библиотека содержит функции для работы с такими массивами, унаследованные от С и описанные в заголовочном файле <string.h>.
Тип данных (класс) string стандартной библиотеки лишен недостатков, присущих массивам символов. Основные действия со строками выполняются в нем с помощью операций и методов, а длина строки изменяется динамически. Для использования класса необходимо подключать к программе заголовочный файл <string>.
Конструкторы и присваивание строк
В классе string определено несколько конструкторов:
srting ( ); // создает пустой объект типа string
string (const *char); // создает объект типа “строка” на основе строки
// старого стиля
string (const *char, int n); // создает объект типа string и записывает туда
// n символов из строки, указанной
// первым параметром
string (string &); // конструктор копирования, создающий новый объект
// как копию объекта, переданного ему в качестве параметра
В классе string определены три операции присваивания:
string & operator = (const string & str);
string & operator = (const char * s);
string & operator = (char c);
Примеры
string s1;
string s2 (“Вася”);
string s3 (s2);
s1 = ‘x’;
s2 = s3;