- •ВВЕДЕНИЕ
- •КЛАССЫ
- •Описание объектов
- •Указатель this
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Статические методы
- •Дружественные функции и классы
- •Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •НАСЛЕДОВАНИЕ
- •Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Абстрактные классы
- •ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •СТАНДАРТНАЯ БИБЛИОТЕКА
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Файловые потоки
- •СТРОКИ
- •Операции
- •Функции
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •КОНТЕЙНЕРНЫЕ КЛАССЫ
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Списки
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •ПРИЛОЖЕНИЕ 1. ШАБЛОНЫ ФУНКЦИЙ
- •ПРИЛОЖЕНИЕ 2. ШАБЛОНЫ КЛАССОВ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Операции
Ниже приведены операции со строками.
Таблица 5
Операция |
Действие |
= |
Присваивание |
+ |
Конкатенация |
= = |
Равенство |
! = |
Неравенство |
< |
Меньше |
< = |
Меньше или равно |
> |
Больше |
> = |
Больше или равно |
[ ] |
Индексация |
<< |
Вывод |
>> |
Ввод |
+ = |
Добавление |
Для строк типа string не соблюдается соответствие между адресом первого элемента строки и именем, как это было в случае строк старого стиля, т. е. &s[0] не равно s.
Кроме операции индексации для доступа к элементу строки определена функция at:
string s("Вася");
cout << s.at (1); // будет выведен символ а
Функции
Присваивание и добавление частей строк
Для присваивания части одной строки другой служит функция assign: assign (const string & str);
assign (const string & str, size_type pos, size_type n); assign (const char * str, size_type n);
Первая функция присваивает строкуstr вызывающей строке (эквивалент операции присваивания):
string s1 ("Вася"), s2; s2.assign (s1);
Вторая функция присваивает вызывающей строке часть строкиstr, начиная с позицииpos. Если pos больше длины строки, порождается исключение out_of_range. Вызывающей строке присваиваетсяn символов либо, если pos больше длины строки str, – все символы до конца строки str.
Третья функция присваивает вызывающей строкеn символов строкиs старого типа.
49
Для добавления части одной строки к другой служит функция append: append (const string & str);
append (const string & str, size_type pos, size_type n); append (const char* s, size_type n);
Первая функция добавляет строкуstr к вызывающей строке (эквивалент операции +).
Вторая функция добавляет к взывающей строке часть строкиstr, начиная с позиции pos.
Третья функция добавляет к вызывающей строкеn символов строкиs старого типа.
Преобразование строк
Для вставки в одну строку части другой строки служит функция insert: insert (size_type pos1, const string & str);
insert (size_type pos1, const string & str, size_type pos2, size_type n ); insert (size_type pos, const char* s, size_type n );
Первая функция вставляет строкуstr в вызывающую строку, начиная с позиции pos1 вызывающей строки (т. е. взывающая строка замещается строкой str, начиная с позиции pos1, а после str располагаются остальные символы вызывающей строки).
Вторая функция вставляет в вызывающую строку, начиная с позиции pos1, часть строки str длиной n символов, начиная с позиции pos2.
Третья функция вставляет в вызывающую строку n элементов строки старого типа, начиная с позиции pos вызывающей строки.
Для удаления части строки служит функция erase: erase (size_type pos = 0, size_type n = pos);
Функция удаляет из вызывающей строки n элементов, начиная с позиции pos. Если pos не указана, элементы удаляются с начала строки.
Очистку всей строки можно выполнить с помощью функции clear: void clear ( );
Для замены части строки служит функция replace: replace (size_type pos1, size_type n1,const string & str);
replace (size_type pos1, size_type n1,const string & str, size_type pos2, size_type n2);
Здесь pos1 – позиция вызывающей строки, начиная с которой выполняется замена; n1 – количество удаляемых элементов, pos2 – позиция строки str, начиная с которой она вставляется в вызывающую строку; n2 – количество вставляемых элементов строки str.
Третья форма функции:
replace (size_type pos1, size_type n1,const char* s, size_type n2);
позволяет заменить n1 символов вызывающей строки на n2 символов строки старого типа s.
Для обмена содержимого двух строк служит функция swap:
50
swap (string & s);
Для выделения части строки служит функция substr: substr (size_type pos = 0, size_type n = npos);
Эта функция возвращает подстроку вызывающей строки длинойn символов, начиная с позиции npos.
Для преобразования объектов типаstring в строки старого стиля используется функция c_str:
const char* c_str ( ) const;
Функция возвращает константный указатель на оканчивающуюся нульсимволом строку.
Примеры
String s1 ("прекрасная королева"), s2 ("ле"), s3("корова"); cout << s3.insert (4, s2) << endl; // получится: королева cout << s3.insert (7, “к”) << endl; // получится: королевка
s1.erase (0,3); // получится: s1="красная королева" cout << s1.erase (12, 2) << endl; // получится: красная корова
Поиск подстрок
Для поиска подстрок в классеstring предусмотрено большое разнообразие функций. Рассмотрим некоторые их них:
size_type find (const string & str, size_type pos = 0) const;
ищет самое левое вхождение строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию в строке или числоnpos (максимальное число типа size_type), если строка не найдена.
size_type find (const char с, size_type pos = 0) const;
ищет самое левое вхождение символа c в вызывающую строку, начиная с позиции pos, и возвращает позицию в строке или числоnpos, если строка не найдена.
size_type rfind (const string & str, size_type pos = npos) const;
ищет самое правое вхождение строки str в вызывающую строку до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.
size_type rfind (const char c, size_type pos = 0) const;
ищет самое правое вхождение символа c в вызывающую строку, до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.
Примеры int i, j;
string s1 ("лесная королева"), s2 ("ле"); i = s1.find (s2);
j = s1.rfind (s2);
cout << “Первое вхождение S2 в S1 ” << i<< endl; cout << “Последнее вхождение S2 в S1 “ << j<< endl;
51
На экране получится:
Первое вхождение S2 в S1 0 Последнее вхождение S2 в S1 11
Сравнение частей строк
Для сравнения частей строк используется функцияcompare (для сравнения строк целиком применяются перегруженные операции отношения):
int compare (const string & str) const;
int compare (size_type pos1, size_type n1, const string & str) const;
int compare (size_type pos1, size_type n1, const string & str, size_type pos2, size_type n2) const;
Первая форма функции сравнивает две строки целиком и возвращает значение меньше нуля, если вызывающая строка «меньше» str, равное нулю, если строки одинаковы, и больше нуля, если вызывающая строка «больше». Здесь «больше» или «меньше» означает сравнение букв по старшинству (порядку),
т. е. «aa» и «aa» равны, «аб» и «ав» – вторая строка «больше» и т. п.
Вторая форма функции выполняет аналогичные действия, но сравнивает со строкой str n1 символов вызывающей строки, начиная с позиции pos1.
Третья форма функции сравнивает n1 символов вызывающей строки, начиная с позиции pos1, с подстрокой строки str длиной n2 символов, начиная с позиции pos2.
Получение характеристик строк
В классе string определено |
несколько методов, позволяющих получить |
длину строки и объем памяти, занимаемый объектом: |
|
size_type size ( ) const; |
// количество элементов строки |
size_type length ( ) const; |
// количество элементов строки |
size_type max_size ( ) const; |
// максимальная длина строки |
size_type capacity ( ) const; |
// объем памяти, занимаемый строкой |
bool empty ( ) const; |
// истина, если строка пустая |
Пример
string s("aaaaa");
cout << s.size( ) << endl; // выводим длину строки
Задание
Перепишите вашу программу – текстовый редактор с использованием класса string.
52