Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
umm_3690.pdf
Скачиваний:
24
Добавлен:
30.04.2015
Размер:
364.53 Кб
Скачать

Операции

Ниже приведены операции со строками.

Таблица 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]