Стенли Липпман - Язык программирования C++. Пятое издание

Тут можно читать онлайн Стенли Липпман - Язык программирования C++. Пятое издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2014. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Язык программирования C++. Пятое издание
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2014
  • Город:
    Москва
  • ISBN:
    978-5-8459-1839-0
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание

Язык программирования C++. Пятое издание - описание и краткое содержание, автор Стенли Липпман, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com

Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C++. Пятое издание - читать книгу онлайн бесплатно, автор Стенли Липпман
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

return m[3].matched

&& (m[4].matched == 0 || m[4].str() == " ");

else

// здесь после кода города не может быть закрывающей скобки

// но разделители между другими двумя компонентами должны быть

// корректны

return !m[3].matched

&& m[4].str() == m[6].str();

}

Начнем с проверки соответствия первому подвыражению (т.е. открывающей скобки). Это подвыражение находится в элементе m[1]. Если это соответствие есть, то номер начинается с открывающей скобки. В таком случае номер будет допустимым, только если подвыражение после кода города также будет соответствующим (т.е. будет закрывающая скобка после кода города). Кроме того, если скобки в начале номера корректны, то следующим символом должен быть пробел или первая цифра следующей части номера.

Если элемент m[1]не соответствует (т.е. открывающей скобки нет), то подвыражение после кода города также должно быть пустым. Если это так и если остальные разделители совпадают, то номер допустим, но не в противном случае.

Упражнения раздела 17.3.3

Упражнение 17.19. Почему можно вызывать функцию m[4].str()без предварительной проверки соответствия элемента m[4]?

Упражнение 17.20. Напишите собственную версию программы для проверки номеров телефонов.

Упражнение 17.21. Перепишите программу номеров телефонов из раздела 8.3.2 так, чтобы использовать функцию valid(), определенную в этом разделе.

Упражнение 17.22. Перепишите программу номеров телефонов так, чтобы она позволила разделять три части номера телефона любыми символами.

Упражнение 17.23. Напишите регулярное выражение для поиска почтовых индексов. У них может быть пять или девять цифр. Первые пять цифр могут быть отделены от остальных четырех тире.

17.3.4. Использование функции regex_replace()

Регулярные выражения зачастую используются не только для поиска, но и для замены одной последовательности другой. Например, может потребоваться преобразовать американские номера телефонов в формат "ddd.ddd.dddd", где код города и три последующие цифры разделены точками.

Когда необходимо найти и заменить регулярное выражение в исходной последовательности, используется функция regex_replace(). Подобно функции поиска, функция regex_replace(), описанная в табл. 17.12, получает входную символьную последовательность и объект класса regex. Следует также передать строку, которая описывает необходимый вывод.

Таблица 17.12. Функции замены регулярного выражения

m.format(dest, fmt , mft) m.format( fmt , mft) Создает форматированный вывод, используя формат строки fmt , соответствие в mи необязательные флаги match_flag_typeв mft. Первая версия пишет в итератор вывода dest(см. раздел 10.5.1) и получает формат fmt , который может быть строкой или парой указателей, обозначающих диапазон в символьном массиве. Вторая версия возвращает строку, которая содержит вывод и получает формат fmt , являющийся строкой или указателем на символьный массив с нулевым символом в конце. По умолчанию mftимеет значение format_default
regex_replace(dest, seq , r, fmt , mft) regex_replace( seq , r, fmt , mft) Перебирает последовательность seq , используя функцию regex_search()для поиска соответствий объекту rкласса regex. Использует формат строки fmt и необязательные флаги match_flag_typeв mftдля формирования вывода. Первая версия пишет в итератор вывода destи получает пару итераторов для обозначения последовательности seq . Вторая возвращает строку, содержащую вывод, a seq может быть строкой или указателем на символьный массив с нулевым символом в конце. Во всех случаях формат fmt может быть строкой или указателем на символьный массив с нулевым символом в конце. По умолчанию mftимеет значение match_default

Строку замены составляют подлежащие включению символы вместе с подвыражениями из соответствующей подстроки. В данном случае следует использовать второе, пятое и седьмое подвыражения из строки замены. Первое, третье, четвертое и шестое подвыражения игнорируются, поскольку они использовались в первоначальном форматировании номера, но не являются частью формата замены. Для ссылки на конкретное подвыражение используется символ $, сопровождаемый индексом подвыражения:

string fmt = "$2.$5.$7"; // переформатировать номера в ddd.ddd.dddd

Схему регулярного выражения и строку замены можно использовать следующим образом:

regex r(phone); // regex для поиска схемы

string number = "(908) 555-1800";

cout << regex_replace(number, r, fmt) << endl;

Вывод этой программы будет таким:

908.555.1800

Замена только части исходной последовательности

Куда интересней использование обработки регулярных выражений для замены номеров телефонов в большом файле. Предположим, например, что имеется файл имен и номеров телефонов, содержащий такие данные:

morgan (201) 555-2368 862-555-0123/

drew (973)555.0130

lee (609) 555-0132 2015550175 800.555-0000

Их следует преобразовать в такой формат:

morgan 201.555.2368 862.555.0123

drew 973.555.0130

lee 609.555.0132 201.555.0175 800.555.0000

Это преобразование можно осуществить следующим образом:

int main() {

string phone =

"(\\()?(\\d{3})(\\))?([-. ])?(\\d{3})([-. ])?(\\d{4})";

regex r(phone); // regex для поиска схемы

smatch m;

string s;

string fmt = "$2.$5.$7"; // переформатировать номера в ddd.ddd.dddd

// прочитать каждую запись из входного файла

while (getline(cin, s))

cout << regex_replace(s, r, fmt) << endl;

return 0;

}

Каждая запись читается в строку sи передается функции regex_replace(). Эта функция находит и преобразует все соответствия исходной последовательности.

Флаги, контролирующие соответствия и формат

Кроме флагов обработки регулярных выражений, библиотека определяет также флаги, позволяющие контролировать процесс поиска соответствия и форматирования при замене. Их значения приведены в табл. 17.13. Эти флаги могут быть переданы функции regex_search(), или функции regex_match(), или функциям-членам формата класса smatch.

Таблица 17.13. Флаги соответствия

Определено в regex_constants::match_flag_type
match_default Эквивалент format_default
match_not_bol He рассматривать первый символ как начало строки
match_not_eol Не рассматривать последний символ как конец строки
match_not_bow Не рассматривать первый символ как начало слова
match_not_eow Не рассматривать последний символ как конец слова
match_any Если соответствий несколько, может быть возвращено любое из них
match_not_null Не соответствует пустой последовательности
match_continuous Соответствие должно начинаться с первого символа во вводе
match_prev_avail У исходной последовательности есть символы перед первым
format_default Строка замены использует правила ECMAScript
format_sed Строка замены использует правила POSIX sed
format_no_copy Не выводить несоответствующие части ввода
format_first_only Заменить только первое вхождение

Флаги соответствия и формата имеют тип match_flag_type. Их значения определяются в пространстве имен regex_constants. Подобно пространству имен placeholders, используемому с функциями bind()(см. раздел 10.3.4), пространство имен regex_constantsопределено в пространстве имен std. Для использования имени из пространства regex_constantsего следует квалифицировать именами обоих пространств имен:

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

Интервал:

Закладка:

Сделать


Стенли Липпман читать все книги автора по порядку

Стенли Липпман - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C++. Пятое издание отзывы


Отзывы читателей о книге Язык программирования C++. Пятое издание, автор: Стенли Липпман. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x