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


Авторские права

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

Здесь можно скачать бесплатно "Стенли Липпман - Язык программирования C++. Пятое издание" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство Издательский дом "Вильямс", год 2014. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Стенли Липпман - Язык программирования C++. Пятое издание
Рейтинг:
Название:
Язык программирования C++. Пятое издание
Издательство:
Издательский дом "Вильямс"
Год:
2014
ISBN:
978-5-8459-1839-0
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

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

Описание и краткое содержание "Язык программирования C++. Пятое издание" читать бесплатно онлайн.



Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!

Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под стандарт С++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.

С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.


Стенли Б. Липпман работал старшим консультантом в Jet Propulsion Laboratory, архитектором группы Visual С++ корпорации Microsoft, техническим сотрудником Bell Laboratories и главным инженером- программистом по анимации в кинокомпаниях Disney, DreamWorks, Pixar и PDI.

Жози Лажойе, работающий ныне в кинокомпании Pixar, был членом канадской группы разработчиков компилятора C/C++ корпорации IBM, а также возглавлял рабочую группу базового языка С++ в составе международной организации по стандартизации ANSI/ISO.

Барбара Э. Му имеет почти тридцатилетний опыт программирования. На протяжении пятнадцати лет она работала в компании AT&T, сотрудничая с Бьярне Страуструпом, автором языка С++, и несколько лет руководила группой разработчиков С++.


• Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием

• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования

• Изучите принципы и узнайте почему язык С++11 работает именно так

• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть

• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем

• Освойте лучшие методики программирования и закрепите на практике изученный материал

Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com






Упражнение 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 его следует квалифицировать именами обоих пространств имен:

using std::regex_constants::format_no_copy;

Это объявление указывает, что когда код использует флаг format_no_copy, необходим объект из пространства имен std::regex_constants. Вместо этого можно использовать и альтернативную форму using, рассматриваемую в разделе 18.2.2:

using namespace std::regex_constants;

Использование флагов формата

По умолчанию функция regex_replace() выводит всю исходную последовательность. Части, которые не соответствуют регулярному выражению, выводятся без изменений, а соответствующие части оформляются, как указано строкой формата. Это стандартное поведение можно изменить, указав флаг format_no_copy в вызове функции regex_replace():

// выдать только номера телефона: используется новая строка формата

string fmt2 = "$2.$5.$7 "; // поместить пробел как разделитель после

                           // последнего числа

// указать regex_replace() копировать только заменяемый текст

cout << regex_replace(s, r, fmt2, format_no_copy) << endl;

С учетом того же ввода эта версия программы создает такой вывод:


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

Книги похожие на "Язык программирования C++. Пятое издание" читать онлайн или скачать бесплатно полные версии.


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

Все книги автора Стенли Липпман

Стенли Липпман - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

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

А что Вы думаете о книге? Оставьте Ваш отзыв.