Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
regex r( re ) regex r( re , f) |
Параметр re представляет регулярное выражение и может быть строкой, парой итераторов, обозначающих диапазон символов, указателем на символьный массив с нулевым символом в конце, указателем на символ и количеством или списком символов в скобках, f — это флаги, определяющие выполнение объекта. Флаги f устанавливаются исходя из упомянутых ниже значений. Если флаги f не определены, по умолчанию применяется ECMAScript |
r1 = re |
Заменяет регулярное выражение в r1 регулярным выражением re . re — это регулярное выражение, которое может быть другим объектом класса regex , строкой, указателем на символьный массив с нулевым символом в конце или списком символов в скобках |
r1.assign( re , f) |
То же самое, что и оператор присвоения ( = ). Параметр re и необязательный флаг f имеют тот же смысл, что и соответствующие аргументы конструктора regex() |
r.mark_count() |
Количество подвыражений (рассматриваются в разделе 17.3.3) в объекте r |
r.flags() |
Возвращает набор флагов для объекта r |
Примечание : конструкторы и операторы присвоения могут передавать исключение типа regex_error . |
|
Флаги, применяемые при определении объекта класса regex . Определены в типах regex и regex_constants::syntax_option_type |
|
---|---|
icase |
Игнорировать регистр при поиске соответствия |
nosubs |
Не хранить соответствия подвыражений |
optimize |
Предпочтение скорости выполнения скорости создания |
ECMAScript |
Использование грамматики согласно ЕСМА-262 |
basic |
Использование базовой грамматики регулярных выражений POSIX |
extended |
Использование расширенной грамматики регулярных выражения POSIX |
awk |
Использование грамматики POSIX версии языка awk |
grep |
Использование грамматики POSIX версии языка grep |
egrep |
Использование грамматики POSIX версии языка egrep |
Начнем с определения строки для хранения искомого регулярного выражения. Регулярное выражение [^с]
означает любой символ, отличный от символа 'c'
, a [^c]ei
— любой такой символ, сопровождаемый символами 'ei'
. Эта схема описывает строки, содержащие только три символа. Необходимо найти целое слово, содержащее эту схему. Для соответствия слову необходимо регулярное выражение, которое будет соответствовать символам, расположенным прежде и после заданной трехсимвольной схемы.
Это регулярное выражение состоит из любого количества символов, сопровождаемых первоначальной трехсимвольной схемой и любым количеством дополнительных символов. По умолчанию объекты класса regex используют язык регулярных выражений ECMAScript. На языке ECMAScript схема [[:alpha:]]
соответствует любому алфавитному символу, а символы +
и *
означают "один или несколько" и "нуль или более" соответственно. Таким образом, схема [[:alpha:]]*
будет соответствовать любому количеству символов.
Регулярное выражение, сохраненное в строке pattern
, используется для инициализации объекта r
класса regex. Затем определяется строка, которая будет использована для проверки регулярного выражения. Строка test_str
инициализируется словами, которые соответствуют схеме (например, "freind" и "theif"), и словами, которые ей не соответствуют (например, "receipt" и "receive"). Определим также объект results
класса smatch
, передаваемый функции regex_search()
. Если соответствие будет найдено, то объект results
будет содержать подробности о том, где оно найдено.
Затем происходит вызов функции regex_search()
. Если она находит соответствие, то возвращает значение true
. Для вывода части строки test_str
, соответствующей заданной схеме, используется функция-член str()
объекта results
. Функция regex_search()
прекращает поиск, как только находит в исходной последовательности соответствующую подстроку. В результате вывод будет таким:
freind
Поиск всех соответствий во вводе представлен в разделе 17.3.2.
regex
При определении объекта класса regex
или вызове его функции assign()
для присвоения ему нового значения можно применить один или несколько флагов, влияющих на работу объекта класса regex
. Эти флаги контролируют обработку, осуществляемую этим объектом. Последние шесть флагов, указанных в табл. 17.6, задают язык, на котором написано регулярное выражение. Установлен должен быть только один из флагов определения языка. По умолчанию установлен флаг ECMAScript
, задающий использование объектом класса regex
спецификации ЕСМА-262, являющейся языком регулярных выражений большинства веб-браузеров.
Другие три флага позволяют определять независимые от языка аспекты обработки регулярного выражения. Например, можно указать, что поиск регулярного выражения не будет зависеть от регистра символов.
В качестве примера используем флаг icase
для поиска имен файлов с указанными расширениями. Большинство операционных систем распознают расширения без учета регистра символов: программа С++ может быть сохранена в файле с расширением .cc
, .Cc
, .cC
или .CC
. Давайте напишем регулярное выражение для распознавания любого из них наряду с другими общепринятыми расширениями файлов:
// один или несколько алфавитно-цифровые символов, сопровождаемых
// и "cpp", "cxx" или "cc"
regex r("[[:alnum:]]+\\.(cpp|схх|cc)$", regex::icase);
smatch results;
string filename;
while (cin >> filename)
if (regex_search(filename, results, r))
cout << results.str() << endl; // вывод текущего соответствия
Это выражение будет соответствовать строке из одного или нескольких символов или цифр, сопровождаемых точкой и одним из трех расширений файла. Регулярное выражение будет соответствовать расширению файлов независимо от регистра.
Подобно тому, как специальные символы есть в языке С++ (см. раздел 2.1.3), у языков регулярных выражений, как правило, тоже есть специальные символы. Например, точка (.) обычно соответствует любому символу. Как и в языке С++, для обозначения специального характера символа его предваряют символом наклонной черты. Поскольку наклонная черта влево является также специальным символом в языке С++, в строковом литерале языка С++, означающем наклонную черту влево следует использовать вторую наклонную черту влево. Следовательно, чтобы представить точку в регулярном выражении, необходимо написать \\.
.
Интервал:
Закладка: