Строки. Поиск

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

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

  • поиск отдельных символов, последовательностей символов (подстрок) или вхождений одного символа из нескольких возможных;
  • поиск в прямом и обратном направлениях;
  • поиск, начиная с произвольной позиции (в начале или внутри строки).

   
Кроме того, итераторы позволяют передавать строки любым поисковым алгоритмам 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.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий