Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
st1 = st2; // присвоение: замена содержимого st1 копией st2
// теперь st1 и st2 - пустые строки
Результатом сложения двух строк является новая строка, объединяющая содержимое левого операнда, а затем правого. Таким образом, при применении оператора суммы (оператор +
) к строкам результатом будет новая строка, символы которой являются копией символов левого операнда, сопровождаемые символами правого операнда. Составной оператор присвоения (оператор +=
) (см. раздел 1.4.1) добавляет правый операнд к строке слева:
string s1 = "hello, ", s2 = "world\n";
string s3 = s1 + s2; // s3 - hello, world\n
s1 += s2; // эквивалентно s1 = s1 + s2
Как уже упоминалось в разделе 2.1.2, один тип можно использовать там, где ожидается другой тип, если есть преобразование из данного типа в ожидаемый. Библиотека string
позволяет преобразовывать как символьные, так и строковые литералы (см. раздел 2.1.3) в строки. Поскольку эти литералы можно использовать там, где ожидаются строки, предыдущую программу можно переписать следующим образом:
string s1 = "hello", s2 = "world"; // в s1 и s2 нет пунктуации
string s3 = s1 + ", " + s2 + '\n';
Когда объекты класса string
смешиваются со строковыми или символьными литералами, то по крайней мере один из операндов каждого оператора +
должен иметь тип string
.
string s4 = s1 + ", "; // ok: сложение строки и литерала
string s5 = "hello" + ", "; // ошибка: нет строкового операнда
string s6 = s1 + ", " + "world"; // ok: каждый + имеет
// строковый операнд
string s7 = "hello" + ", " + s2; // ошибка: нельзя сложить строковые
// литералы
В инициализации переменных s4
и s5
задействовано только по одному оператору, поэтому достаточно просто проверить его корректность. Инициализация переменной s6
может показаться странной, но работает она аналогично объединенным в цепочку операторам ввода или вывода (см. раздел 1.2). Это эквивалентно следующему коду:
string s6 = (s1 + ", ") + "world";
Часть s1 + ", "
выражения возвращает объект класса string
, она составляет левый операнд второго оператора +
. Это эквивалентно следующему коду:
string tmp = s1 + ", "; // ok: + имеет строковый операнд
s6 = tmp + "world"; // ok: + имеет строковый операнд
С другой стороны, инициализация переменной s7
недопустима, и это становится очевидным, если заключить часть выражения в скобки:
string s7 = ("hello" + ", ") + s2; // ошибка: нельзя сложить строковые
// литералы
Теперь довольно просто заметить, что первая часть выражения суммирует два строковых литерала. Поскольку это невозможно, оператор недопустим.
По историческим причинам и для совместимости с языком С строковые литералы не принадлежат к типу
string
стандартной библиотеки. При использовании строковых литералов и библиотечного типа string
, не следует забывать, что это разные типы.
Упражнение 3.2. Напишите программу, читающую со стандартного устройства ввода по одной строке за раз. Измените программу так, чтобы читать по одному слову за раз.
Упражнение 3.3. Объясните, как символы пробелов обрабатываются в операторе ввода класса string
и в функции getline()
.
Упражнение 3.4. Напишите программу, читающую две строки и сообщающую, равны ли они. В противном случае программа сообщает, которая из них больше. Затем измените программу так, чтобы она сообщала, одинаковая ли у строк длина, а в противном случае — которая из них длиннее.
Упражнение 3.5. Напишите программу, читающую строки со стандартного устройства ввода и суммирующую их в одну большую строку. Отобразите полученную строку. Затем измените программу так, чтобы отделять соседние введенные строки пробелами.
3.2.3. Работа с символами строки
Зачастую приходится работать с индивидуальными символами строки. Например, может понадобиться выяснить, является ли определенный символ пробелом, или изменить регистр символов на нижний, или узнать, присутствует ли некий символ в строке, и т.д.
Одной из частей этих действий является доступ к самим символам строки. Иногда необходима обработка каждого символа, а иногда лишь определенного символа, либо может понадобиться прекратить обработку, как только выполнится некое условие. Кроме того, это наилучший способ справиться со случаями, когда задействуются разные языковые и библиотечные средства.
Другой частью обработки символов является выяснение и (или) изменение их характеристик. Эта часть задачи выполняется набором библиотечных функций, описанных в табл. 3.3. Данные функции определены в заголовке cctype
.
Таблица 3.3. Функции cctype
isalnum(с) |
Возвращает значение true , если с является буквой или цифрой |
isalpha(с) |
Возвращает значение true , если с — буква |
iscntrl(с) |
Возвращает значение true , если с — управляющий символ |
isdigit(с) |
Возвращает значение true , если с — цифра |
isgraph(с) |
Возвращает значение true , если с — не пробел, а печатаемый символ |
islower(с) |
Возвращает значение true , если с — символ в нижнем регистре |
isprint(с) |
Возвращает значение true , если с — печатаемый символ |
ispunct(с) |
Возвращает значение true , если с — знак пунктуации (т.е. символ, который не является управляющим символом, цифрой, символом или печатаемым отступом) |
isspace(с) |
Возвращает значение true , если с — символ отступа (т.е. пробел, табуляция, вертикальная табуляция, возврат, новая строка или прогон страницы) |
isupper(с) |
Возвращает значение true , если с — символ в верхнем регистре |
isxdigit(с) |
Возвращает значение true , если с — шестнадцатеричная цифра |
tolower(с) |
Если с — прописная буква, возвращает ее эквивалент в нижнем регистре, в противном случае возвращает символ с неизменным |
toupper(с) |
Если с — строчная буква, возвращает ее эквивалент в верхнем регистре, в противном случае возвращает символ с неизменным |
Кроме средств, определенных специально для языка С++, его библиотека содержит также библиотеку языка С. Имена заголовков языка С имеют формат имя .h
. Версии этих же заголовков языка С++ имеют формат c имя
, т.е. суффикс .h
удален, а имени
предшествует символ с
, означающий, что этот заголовок принадлежит библиотеке С.
Интервал:
Закладка: