Глава 21. Понятие строк в ANSI С и ANSI C++_________________________575

В начале раздела упоминался также второй тип поиска. Такие функции строкового класса, как find_first_of, find_first_not_of, find_last_of И find_last_not_of, представляют из себя такой тип поиска, при котором передаваемая функции в качестве аргумента последовательность символов рассматривается как набор отдельных символов. Пример:

string targetString("Вот цель наших поисков — поиск и еще раз поиск!");

cout « targetString. find_first__of ("no") « endl;

В данном случае производится поиск местонахождения символов "п" или "о" в строке targetString. Результат .равен 1, так как первый символ "о" встречается В ПОЗИЦИИ 1 СТрОКИ targetString.

Функция find_first_not_of соответственно ищет первый не совпадающий с аргументом символ:

cout « targetString.find_first_not_of("Вот") « endl;

Результат равен 3. В этой позиции в строке targetString находится символ " ", не входящий в набор {в, о, т) (запомните, что здесь не ищется слово

"Вот").

Как вы и ожидаете, функции find_last_of и find_last_not_of начинают поиск от конца строки и работают в обратном порядке. Обратите внимание на еще один аргумент в вызове функции, ограничивающий пространство поиска.

cout « targetString.find_last_of("абвг", 15) « endl;

Этот пример дает результат 10. Почему? Поиск в строке targetString начинается с 15 символа ("п." в слове "поисков") и производится в обратную сторону. Последнее, если считать отсюда, вхождение а, б, в, или г в строке

targetString — ЭТО, несомненно, "а" В СЛОВе "наших",

Подводя итог рассмотрения функций поиска, рассмотрим функцию

find last not of:

cout « targetString.find_last_not_of("абвг", 15) « endl;

Возвращаемый результат равен 15: последнее вхождение в строке targetString символа не из набора {а, б, в, г}, начиная с 19 символа и в обратную сторону — это "п" в слове "поисков".

Ввод-вывод строк ANSI при помощи операций « и »

Из приведенных выше примеров вы уже научились выводить экземпляры строкового класса. Для этого просто используйте перегруженную операцию «. Таким же образом работает и ввод — через операцию »: