
- •Часть 4. Стандартная библиотека
- •Екатеринбург
- •Введение
- •Потоковые классы
- •Стандартные потоки
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Ошибки потоков
- •Файловые потоки
- •Строковые потоки
- •Конструкторы и присваивание строк
- •Операции
- •Функции Присваивание и добавление частей строк
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •Оглавление
- •Часть 4. Стандартная библиотека
- •620002, Екатеринбург, ул.Мира, 19
- •620002, Екатеринбург, ул.Мира, 19
Поиск подстрок
Для поиска подстрок в классе 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;
На экране получится:
Первое вхождение 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.
__________________________________________________________________
-
Павловская Т.А. С / C++. Программирование на языке высокого уровня
/ Т.А. Павловская. СПб, 2002.
-
Павловская Т.А. С / C++. Структурное программирование: практикум
/ Т.А.Павловская, Ю.А. Щупак. СПб, 2002.
-
Павловская Т.А. / C++. Объектно-ориентированное программирование: практикум/ Т.А.Павловская, Ю.А.Щупак. СПб, 2002.