Программирование >>  Операторы преобразования типа 

1 ... 150 151 152 [ 153 ] 154 155 156 ... 239


Функцию 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; Будьте внимательны: другие типы

не подходят!



1 ... 150 151 152 [ 153 ] 154 155 156 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика