![]() |
|
Программирование >> Операторы преобразования типа
Функцию getlineO не обязательно снабжать префиксом std:;, поскольку при вызове функции по - правилу Кенига поиск автоматически начнется с того пространства имен, в котором определен класс аргумента. волы (вместе с начальными пропусками) до тех пор, пока не обнаружит разделитель строк или конец файла. Разделитель строк извлекается из потока данных, но не присоединяется к прочитанным данным. По золчанию разделителем строк является символ новой строки, однако вы можете передать собственный разделитель в необязательном аргументе Таким образом, оператор << может использоваться для чтения лексем, разделенных произвольными символами: std::Str1ng S; while Cgetline(std::cln.s)) { Для каждой строки, прочитанной из cin } while Cgetlinetstd::cin.s.:)) ( Для каждой строки, прочитанной из cin } Учтите, что в режиме чтения лексем символ новой строки не является специальным символом. То есть лексемы могут содержать внутренние символы новой строки. Поиск Для строк определены многочисленные функции поиска отдельных символов или подстрок. В частности, поддерживаются следующие возможности: О поиск отдельных символов, последовательностей символов (подстрок) или вхождений одного символа из нескольких возможных; О поиск в прямом и обратном направлениях; О поиск, начиная с произвольной позиции (в начале или внутри строки). Кроме того, итераторы позволяют передавать строки любым поисковым алгоритмам STL. В именах всех поисковых функций присутствует слово find>. Эти функции ищут позицию символа со значением value, передаваемым в качестве аргумента. Конкретные особенности поиска зависят от точного названия поисковой функции. В табл. 11.5 перечислены все поисковые функции для строк. Таблица 11.5. Поисковые функции для строк Функция Описание find() Поиск первого вхождения value rfindO Поиск последнего вхождения value (поиск в обретном направлении) find first.of() Поиск первого символа, входящего в value Функция Описание findJast of() Поиск последнего символа, входящего в value find first not of() Поиск первого символа, не входящего в value findJast not of() Поиск последнего символа, не входящего в value Все поисковые функции возвращают индекс первого символа последовательности, удовлетворяющей заданному условию. Если поиск завершается неудачей, все функции возвращают npos. Поисковые функции используют следующую схему передачи аргументов: О в первом аргументе всегда передается искомое значение; О второй аргумент определяет индекс, с которого должен начинаться поиск; О необязательный третий аргумент определяет количество символов в искомом значении. К сожалению, эта схема передачи аргументов отличается от схем, принятых в других строковых функциях, когда в первом аргументе передается начальный индекс, а значение и длина определяются соседними аргументами. Каждая строковая функция перегружается для перечисленных ниже аргументов. const strings value Поиск символов строки value. const strings value. size type 1dx Поиск символов строки value, начиная с позиции idx в строке *this. const char* value Поиск символов С-строки value. const char* value. s1ze type idx Поиск символов С-строки value, начиная с позиции idx в строке *thls. const char* value. size type idx. size type valuejen Поиск value l€n символов символьного массива value, начиная с позиции idx в строке *thls. В этом случае символ \0 не имеет специальной интерпретации внутри value. const char value Поиск символа value. const char value. size type Idx Поиск символа value, начиная с позиции idx в строке *this. Пример: std::string SС Hi Bill. Im ill. so please pay the bill ); s.find( il ) Возвращает 4 (первая подстрока 11 ) idx - s.findCsubstring ): if (idx == Std::String::npos) { Условие команды if равно true в том и только в том случае, если строка s не содержит подстроку substring . Будьте очень внимательны при использовании строкового значения npos и его типа. При проверке возвращаемых значений всегда имейте в виду тип возвращаемого значения string: :size type, но не int или unsigned; в противном случае сравнение возвращаемого значения с string::npos может не сработать. Такое поведение объясняется тем, что при проектировании библиотеки значение npos было определено как число -1: namespace std ( tenp1ate<class charT, class traits = char traits<charT>. class Allocator = allocator<charT> > class basic string { public: typedef typename Allocator::size type size type; static const size type npos - -1; s.findC 1l .lO) Возвращает 13 (первая подстрока il лосле s[10]) s.rfindCil ) Возвращает 37 (последняя подстрока il ) s.find first of( il ) Возвращает 1 (первый из символов i или 1) s.f1nd last of( il ) Возвращает 39 (последний из символов i или 1) s.find first not of( il ) Возвращает О (первый символ. отличный от i и 1) s.find last not of( il ) Возвращает npos При поиске символов и подстрок также используются алгоритмы STL, позволяющие задавать пользовательские критерии сортировки (пример приведен на с. 478). Обратите внимание на отличия в именах поисковых алгоритмов STL и поисковых функций строк. За дополнительной информацией обращайтесь на с. 322. Значение npos Если поиск не дает результатов, поисковые функции возвращают string: mpos. Рассмотрим следующий пример: std::string s; Std::string::size type idx; Будьте внимательны: другие типы не подходят!
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |