std::cout << s.find_last_of("abg") << '\n'; // Найти первое вхождение любого

                                             // из этих символов,

                                             // начиная с конца

 std::cout << s.find_last_not_of("aDinrw") // Найти первое,

  << '\n';                                 // что не входит в этот

                                           // набор, начиная с конца

}

Все эти методы поиска обсуждаются более подробно в разделе «Обсуждение».

Обсуждение

Имеется шесть различных методов для поиска в строках, каждый из которых предоставляет четыре перегруженных варианта. Эти перегрузки позволяют использовать либо параметр basic_string, либо charT* (charT — это символьный тип). Каждый имеет параметр pos типа basic_string::size_type, который позволяет указать индекс, с которого следует начать поиск, и есть перегрузка с параметром n типа size_type, который позволяет выполнить поиск только n символов из набора.

Запомнить все эти методы довольно сложно, так что в табл. 4.2 дается краткая справка по каждому из них и их параметрам.

Табл. 4.2. Методы для поиска строк

МетодОписание
size_type find(const basic_string& str, size_type pos = 0) const;Возвращает индекс первого вхождения символа или подстроки начиная с начала или индекса, указанного в параметре pos.
size_type find (const charT* s, size_type pos, size_type n) const; size_type find (const charT* s, size_type pos = 0) const; size_type find(charT c, size_type pos = 0) const;Если указан n, то при поиске используются первые n символов целевой строки
size_type rfind(...)Находит первое вхождение символа или подстроки, начиная с конца строки и двигаясь к ее началу. Другими словами делает то же, что и find, но начинает поиск с конца строки
size_type find_first_of(...)Находит первое вхождение любого символа из набора, переданного как basic_string или указатель на символы. Если указан n, то ищутся только первые n символов используемого набора
size_type find_last_of(...)Находит последнее вхождение любого символа из набора, переданного как basic_string или указатель на символы. Если указан n, то ищутся только первые n символов используемого набора
size_type find_first_not_of(...)Находит первое вхождение любого символа, не входящего в набор, переданный как basic_string или указатель на символы. Если указан n, то принимаются во внимание только первые n символов используемого набора
size_type find_last_not_of(...)Находит последнее вхождение любого символа, не входящего в набор, переданный как basic_string или указатель на символы. Если указан n, то принимаются во внимание только первые n символов используемого набора

Все эти методы возвращают индекс вхождения искомого элемента, который имеет тип basic_string::size_type. Если поиск заканчивается неудачей, возвращается basic_string::npos, которое является специальным значением (обычно -1), указывающим, что поиск был неудачен. Даже хотя обычно это значение -1, сравнивать возвращаемое значение следует именно с npos, что обеспечит переносимость. Также это сделает код более понятным, так как сравнение с npos является явной проверкой, не содержащей магических чисел.

Перейти на страницу:

Похожие книги