Шаг 378.
Библиотека STL.
Строки. Поиск

    На этом шаге мы перечислим функции поиска, используемые для строк.

    Для строк определены многочисленные функции поиска отдельных символов или подстрок. В частности, поддерживаются следующие возможности:

    Кроме того, итераторы позволяют передавать строки любым поисковым алгоритмам STL.

    В именах всех поисковых функций присутствует слово "find". Эти функции ищут позицию символа со значением value, передаваемым в качестве аргумента. Конкретные особенности поиска зависят от точного названия поисковой функции. В таблице 1 перечислены все поисковые функции для строк.

Таблица 1. Поисковые функции для строк
Функция Описание
find() Поиск первого вхождения value
rfind() Поиск последнего вхождения value (поиск в обратном направлении)
find_first_of() Поиск первого символа, входящего в value
find_last_of() Поиск последнего символа, входящего в value
find_first_not_of() Поиск первого символа, не входящего в value
find_last_not_of() Поиск последнего символа, не входящего в value

    Все поисковые функции возвращают индекс первого символа последовательности, удовлетворяющей заданному условию. Если поиск завершается неудачей, все функции возвращают npos. Поисковые функции используют следующую схему передачи аргументов:

    К сожалению, эта схема передачи аргументов отличается от схем, принятых в других строковых функциях, когда в первом аргументе передается начальный индекс, а значение и длина определяются соседними аргументами. Каждая строковая функция перегружается для перечисленных ниже аргументов.

const strings value
Поиск символов строки value.
const string& value, size_type idx
Поиск символов строки value, начиная с позиции idx в строке *this.
const char* value
Поиск символов С-строки value.
const char* value, size_type idx
Поиск символов С-строки value, начиная с позиции idx в строке *this.
const char* value, size_type idx, size_type value_len
Поиск value_len символов символьного массива value, начиная с позиции idx в строке *this. В этом случае символ \0 не имеет специальной интерпретации внутри value.
const char value
Поиск символа value.
const char value, size_type idx
Поиск символа value, начиная с позиции idx в строке *this.

    Пример:

std::string s("Hi Bill. I'm ill, so please pay the bill");
s.find('il")               // Возвращает 4 (первая подстрока "il")
s.find("il",10)            // Возвращает 13 (первая подстрока "il" после s[10]) 
s.rfind('il")              // Возвращает 37 (последняя подстрока "il") 
s.find_first_of("il")      // Возвращает 1 (первый из символов i или l) 
s.find_last_of("il")       // Возвращает 39 (последний из символов i или l) 
s.find_first_not_of("il")  // Возвращает 0 (первый символ, отличный от i и l) 
s.find_last_not_of("il")   // Возвращает npos

    При поиске символов и подстрок также используются алгоритмы STL, позволяющие задавать пользовательские критерии сортировки. Обратите внимание на отличия в именах поисковых алгоритмов STL и поисковых функций строк. За дополнительной информацией обращайтесь на 255 шаг.

    На следующем шаге мы рассмотрим значение npos.




Предыдущий шаг Содержание Следующий шаг