Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
У функций assign()и append()нет необходимости определять изменяемые части строки: функция assign()всегда заменяет все содержимое строки, а функция append()всегда добавляет в конец строки.
Функция replace()предоставляет два способа определения диапазона удаления символов. Диапазон можно определить по позиции и длине или парой итераторов. Функция insert()предоставляет два способа определения позиции вставки: при помощи индекса или итератора. В любом случае новый элемент (элементы) вставляется перед указанным индексом или итератором.
Существует несколько способов определения символов, добавляемых в строку. Новые символы могут быть взяты из другой строки, из указателя на символ, из заключенного в фигурные скобки списка символов или как символ и как число. Когда символы исходят из строки или указателя на символ, можно передать дополнительные аргументы, указывающие, копируются ли все символы аргумента или только часть.
Не каждая функция поддерживает все версии этих аргументов. Например, нет версии функции insert(), получающей индекс и список инициализации. Аналогично, если необходимо определить точку вставки, используя итератор, невозможно будет впоследствии передать символьный указатель как источник для новых символов.
Упражнение 9.43. Напишите функцию, получающую три строки: s, oldValи newVal. Используя итераторы, а также функции insert(), и erase()замените все присутствующие в строке sэкземпляры строки oldValстрокой newVal. Проверьте функцию на примере замены таких общепринятых сокращений, как "tho"на "though"и "thru"на "through".
Упражнение 9.44. Перепишите предыдущую функцию так, чтобы использовались индекс и функция replace().
Упражнение 9.45. Напишите функцию, получающую строку, представляющую имя и две другие строки, представляющие префикс, такой, как "Mr." или "Ms.", а также суффикс, такой, как "Jr." или "III". Используя итераторы, а также функции insert()и append(), создайте новую строку с суффиксом и префиксом, добавленным к имени.
Упражнение 9.46. Перепишите предыдущее упражнение, используя на сей раз позицию, длину и функцию insert().
9.5.3. Операции поиска строк
Класс stringпредоставляет шесть вариантов функций поиска, у каждой из которых есть четыре перегруженных версии. Функции-члены поиска и их аргументы описаны в табл. 9.14. Каждая из них возвращает значение типа string::size_type, являющееся индексом найденного элемента. Если соответствие не найдено, функции возвращают статический член (см. раздел 7.6) по имени string::npos. Библиотека определяет значение nposкак -1типа const string::size_type. Поскольку nposимеет беззнаковый тип, это означает, что значение nposсоответствует наибольшему возможному размеру, который может иметь любая строка (см. раздел 2.1.2).
Таблица 9.14. Строковые функции поиска
Функции поиска возвращают индекс искомого символа или значение npos, если искомое не найдено |
|
|---|---|
s.find( args ) |
Ищет первое местоположение аргумента args в строке s |
s.rfind( args ) |
Ищет последнее местоположение аргумента args в строке s |
s.find_first_of( args ) |
Ищет первое местоположение любого символа аргумента args в строке s |
s.find_last_of( args ) |
Ищет последнее местоположение любого символа аргумента args в строке s |
s.find_first_not_of( args ) |
Ищет первое местоположение символа в строке s, который отсутствует в аргументе args |
s.find_last_not_of( args ) |
Ищет последнее местоположение символа в строке s, который отсутствует в аргументе args |
Аргумент args может быть следующим |
|
с, pos |
Поиск символа с, начиная с позиции posв строке s. По умолчанию posимеет значение 0 |
s2, pos |
Поиск строки s2, начиная с позиции posв строке s. По умолчанию posимеет значение 0 |
cp, pos |
Поиск строки с завершающим нулевым символом в стиле С, на которую указывает указатель cp. Поиск начинается с позиции posв строке s. По умолчанию posимеет значение 0 |
cp, pos, n |
Поиск первых nсимволов в массиве, на который указывает указатель cp. Поиск начинается с позиции posв строке s. Аргумент posи nне имеет значения по умолчанию |
Функции поиска строк возвращают значение беззнакового типа string::size_type. Поэтому не следует использовать переменную типа intили другого знакового типа для содержания значения, возвращаемого этими функциями (см. раздел 2.1.2).
Самой простой является функция find(). Она ищет первое местоположение переданного аргумента и возвращает его индекс или значение npos, если соответствующее значение не найдено:
string name("AnnaBelle");
auto pos1 = name.find("Anna"); // pos1 == 0
Возвращает значение 0, т.е. индекс, по которому подстрока "Anna"расположена в строке "AnnaBelle".
Поиск (и другие операции со строками) чувствительны к регистру. При поиске в строке регистр имеет значение:
string lowercase("annabelle");
pos1 = lowercase.find("Anna"); // pos1 == npos
Этот код присвоит переменной pos1значение npos, поскольку строка "Anna"не соответствует строке "anna".
Немного сложней искать соответствие любому символу в строке. Например, следующий код находит первую цифру в переменной name:
string numbers("0123456789"), name("r2d2");
// возвращает 1, т.е. индекс первой цифры в имени
auto pos = name.find_first_of(numbers);
Кроме поиска соответствия, вызвав функцию find_first_not_of(), можно искать первую позицию, которая не соответствует искомому аргументу. Например, для поиска первого нечислового символа в строке можно использовать следующий код:
string dept("03714p3");
// возвращает 5 - индекс символа 'p'
auto pos = dept.find_first_not_of(numbers);
Функциям поиска можно передать необязательный аргумент исходной позиции. Этот необязательный аргумент указывает позицию, с которой начинается поиск. По умолчанию значением этого аргумента является нуль. Общепринятой практикой программирования является использование этого аргумента в цикле перебора строки при поиске всех местоположений искомого значения.
Читать дальшеИнтервал:
Закладка: