Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
string::size_type pos = 0;
// каждая итерация находит следующее число в имени
while ((pos = name.find_first_of(numbers, pos))
!= string::npos) {
cout << "found number at index: " << pos
<< " element is " << name[pos] << endl;
++pos; // перевести на следующий символ
}
Условие цикла whileприсваивает переменной posиндекс первой встретившейся цифры, начиная с текущей позиции pos. Пока функция find_first_of()возвращает допустимый индекс, результат отображается, а значение posувеличивается.
Если не увеличивать значение переменной posв конце этого цикла, он никогда не завершится, поскольку при последующих итерациях поиск начнется сначала и найден будет тот же элемент. Поскольку значение nposтак и не будет возвращено, цикл никогда не завершится.
Использованные до сих пор функции поиска выполняется слева направо (т.е. от начала к концу). Библиотека предоставляет аналогичный набор функций, которые просматривают строку справа налево (т.е. от конца к началу). Функция-член rfind()ищет последнюю, т.е. расположенную справа, позицию искомой подстроки.
string river("Mississippi");
auto first_pos = river.find("is"); // возвращает 1
auto last_pos = river.rfind("is"); // возвращает 4
Функция find()возвращает индекс 1, указывая, что подстрока "is"первый раз встречается, начиная с позиции 1, а функция rfind()возвращает индекс 4, указывая начало последнего местонахождения подстроки "is".
Функция find_last()аналогична функции find_first(), но возвращает последнее местоположение, а не первое.
• Функция find_last_of()ищет последний символ, который соответствует любому элементу искомой строки.
• Функция find_last_not_of()ищет последний символ, который не соответствует ни одному элементу искомой строки.
Каждая из этих функций имеет второй необязательный аргумент, который указывает позицию начала поиска.
Упражнение 9.47. Напишите программу, которая находит в строке "ab2c3d7R4E6"каждую цифру, а затем каждую букву. Напишите две версии программы: с использованием функции find_first_of()и функции find_first_not_of().
Упражнение 9.48. С учетом определения переменных name = "r2d2" и numbers = "0123456789", что возвращает вызов функции numbers.find(name)?
Упражнение 9.49. У символов может быть надстрочная часть, расположенная выше середины строки, как у dили f, или подстрочная, ниже середины строки, как у pили g. Напишите программу, которая читает содержащий слова файл и сообщает самое длинное слово, не содержащее ни надстрочных, ни подстрочных элементов.
9.5.4. Сравнение строк
Кроме операторов сравнения (см. раздел 3.2.2), библиотека stringпредоставляет набор функций сравнения, подобных функции strcmp()библиотеки С (см. раздел 3.5.4). Подобно функции strcmp(), функция s.compare()возвращает нуль, положительное или отрицательное значение, в зависимости от того, равна ли строка s, больше или меньше строки, переданной ее аргументом.
Как показано в таб. 9.15, существует шесть версий функции compare(). Ее аргументы зависят от того, сравниваются ли две строки или строка и символьный массив. В обоих случаях сравнивать можно либо всю строку, либо ее часть.
Таблица 9.15. Возможные аргументы функции s.compare()
s2 |
Сравнивает строку sсо строкой s2 |
pos1, n1, s2 |
Сравнивает n1символов, начиная с позиции pos1из строки s, со строкой s2 |
pos1, n1, s2, pos2, n2 |
Сравнивает n1символов, начиная с позиции pos1из строки s, со строкой s2, начиная с позиции pos2в строке s2 |
cp |
Сравнивает строку sс завершаемым нулевым символом массивом, на который указывает указатель cp |
pos1, n1, cp |
Сравнивает n1символов, начиная с позиции pos1из строки s, со строкой cp |
pos1, n1, cp, n2 |
Сравнивает n1символов, начиная с позиции pos1из строки s, со строкой cp, начиная с символа n2 |
9.5.5. Числовые преобразования
Строки зачастую содержат символы, которые представляют числа. Например, числовое значение 15 можно представить как строку с двумя символами, '1'и '5'. На самом деле символьное представление числа отличается от его числового значения. Числовое значение 15, хранимое в 16-разрядной переменной типа short, будет иметь двоичное значение 0000000000001111, а символьная строка "15", представленная как два символа из набора Latin-1, будет иметь двоичное значение 0011000100110101. Первый байт представляет символ '1', восьмеричное значение которого составит 061, а второй байт, представляющий символ '5', в наборе Latin-1 имеет восьмеричное значение 065.
Новый стандарт вводит несколько функций, осуществляющих преобразование между числовыми данными и библиотечным типом string.
Таблица 9.16. Преобразования между строками и числами
to_string(val) |
Перегруженные версии функции возвращают строковое представление значения val. Аргумент valможет иметь любой арифметический тип (см. раздел 2.1.1). Есть версии функции to_string()для любого типа с плавающей точкой и целочисленного типа, включая тип intи большие типы. Малые целочисленные типы преобразуются, как обычно (см. раздел 4.11.1) |
stoi(s, p, b) stol(s, p, b) stoul(s, p, b) stoll(s, p, b) stoull(s, p, b) |
Возвращают числовое содержимое исходной подстроки sкак тип int, long, unsigned long, long longили unsigned long long соответственно. Аргумент bзадает используемое для преобразования основание числа; по умолчанию принято значение 10. Аргумент p— указатель на тип size_t, означающий индекс первого нечислового символа в строке s; по умолчанию pимеет значение 0. В этом случае функция не хранит индекс |
stof(s, p) stod(s, p) stold(s, p) |
Возвращают числовое содержимое исходной подстроки sкак тип float, doubleили long doubleсоответственно. Аргумент pимеет то же назначение, что и у целочисленных преобразований |
int i = 42;
string s = to_string(i); // преобразует переменную i типа int в ее
Интервал:
Закладка: