Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

std::cout << s.find_first_of("swi") // Найти первое вхождение одного

<< '\n'; // из этих символов

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

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

// набор

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является явной проверкой, не содержащей магических чисел.

Имея такое многообразие алгоритмов поиска, у вас должна быть возможность найти то, что вы ищете, а если такой возможности нет, используйте свои собственные алгоритмы. Однако если basic_stringне предоставляет то, что требуется, то перед написанием своего кода посмотрите на . Стандартные алгоритмы работают с последовательностями, используя итераторы и почти также часто — объекты функций. Для удобства и простоты переноса basic_stringпредоставляет итераторы, так что подключение итераторов stringк стандартным алгоритмам является тривиальным. Скажем, вам требуется найти первое вхождение двух одинаковых символов подряд. Для поиска двух одинаковых расположенных рядом («расположенных рядом» означает, что их позиции отличаются на один шаг итератора, т.е. *iter == *(iter + 1))символов в строке используйте шаблон функции adjacent_find.

std::string s = "There was a group named Kiss in the 70s";

std::string::iterator p =

std::adjacent_find(s.begin(), s.end());

Результатом будет итератор, указывающий на первый из двух смежных элементов.

Если вам требуется написать собственный алгоритм работы со строками, не используйте basic_stringтак, как это делается со строками в стиле С, используя для доступа к элементам operator[]. Используйте существующие методы. Каждая функция поиска принимает параметр size_type, указывающий индекс, с которого должен начаться поиск. Последовательно используя функции поиска, можно пройти по всей строке. Рассмотрим пример 4.16, который подсчитывает число уникальных символов в строке.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.