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 дается краткая справка по каждому из них и их параметрам.
| Метод | Описание |
|---|---|
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. Если поиск заканчивается неудачей, возвращается basic_string, которое является специальным значением (обычно -1), указывающим, что поиск был неудачен. Даже хотя обычно это значение -1, сравнивать возвращаемое значение следует именно с npos, что обеспечит переносимость. Также это сделает код более понятным, так как сравнение с npos является явной проверкой, не содержащей магических чисел.