На этом шаге мы перечислим функции поиска, используемые для строк.
Для строк определены многочисленные функции поиска отдельных символов или подстрок. В частности, поддерживаются следующие возможности:
Кроме того, итераторы позволяют передавать строки любым поисковым алгоритмам STL.
В именах всех поисковых функций присутствует слово "find". Эти функции ищут позицию символа со значением value, передаваемым в качестве аргумента. Конкретные особенности поиска зависят от точного названия поисковой функции. В таблице 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
const string& value, size_type idx
const char* value
const char* value, size_type idx
const char* value, size_type idx, size_type value_len
const char value
const char value, size_type idx
Пример:
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.