- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Элементы языка программирования
- •1.2. Процесс создания программы
- •1.3. Первая программа
- •1.4. Состав программы
- •Глава 2. Средства разработки на C++
- •2.1. Системы Turbo C++ 3.0/Borland C++ 3.1
- •2.2. Система C++ Builder
- •Глава 3. Работа с числовыми данными
- •3.1. Целые типы
- •3.2. Числа с плавающей точкой
- •3.3. Ввод и вывод чисел
- •3.4. Логический тип и логические операции
- •3.5. Математические функции
- •Глава 4. Операторы. Ключевые слова
- •4.1. Операторы
- •4.2. Приоритеты операторов
- •4.3. Ключевые слова
- •4.4. Структура программы
- •4.5. Константы
- •Задачи - . Простейшие вычисления
- •Глава 5. Управление и циклы
- •5.1. Условный оператор
- •5.2. Операторы цикла
- •5.3. Переключатель
- •5.4. Операторы break и continue
- •Задачи -. Выбор и циклы
- •Глава 6. Массивы
- •6.1. Одномерные массивы
- •6.2. Двумерные массивы
- •Задачи -. Одно- и двумерные массивы
- •Глава 7. Функции
- •7.1. Определение функции
- •7.2. Формальные параметры и фактические аргументы
- •7.3. Автоматические и статические переменные
- •7.4. Прототипы функций
- •7.5. Массивы как аргументы функций
- •7.6. Внешние переменные
- •7.7. Рекурсия
- •7.8. Перегруженные имена функций
- •7.9. Аргументы функций по умолчанию
- •Задачи -. Функции
- •Глава 8. Символы и строки
- •8.1. Символы
- •8.2. Строки символов
- •Задачи -. Символы и строки
- •Глава 9. Препроцессор
- •9.1. Директивы препроцессора
- •9.2. Макросы
- •Задачи -. Макросы
- •Глава 10. Указатели и ссылки
- •10.1. Указатели и адреса
- •10.2. Указатели и массивы
- •10.3. Адресная арифметика
- •10.4. Символьные указатели
- •10.5. Массивы указателей
- •10.6. Указатели на функции
- •10.7. Ссылки
- •10.8. Операторы new и delete
- •Задачи -. Указатели и ссылки
- •Глава 11. О файлах и командной строке
- •11.1. Знакомство с файлами
- •11.2. Командная строка
- •11.3. Перенаправление стандартного ввода и вывода на файл
- •11.4. Аргументы командной строки
- •Задачи -. Файлы и командная строка
- •Глава 12. Работа с экраном дисплея
- •12.1. Текстовый режим
- •12.2. Графический режим
- •Задачи -. Работа с экраном
- •Глава 13. Внутреннее представление чисел
- •13.1. Двоичная система счисления
- •13.2. Беззнаковые целые
- •13.3. Двоичный дополнительный код
- •13.4. Двоичный код с избытком
- •13.5. Побитовые операторы
- •13.6. Дробные числа в двоичной системе
- •13.7. Внутреннее представление плавающих типов
- •13.8. Преобразование типов
- •Задачи -. Побитовые операторы
- •Глава 14. Структуры, перечисления, объединения
- •14.1. Объявление структур
- •14.2. Структуры и функции
- •14.3. Указатели на структуры
- •14.4. Массивы структур
- •14.5. Перечисления
- •14.6. Объединения
- •14.7. Битовые поля
- •14.8. О бинарных файлах
- •Задачи -. Структуры
- •Глава 15. Классы
- •15.1. Структуры в C++. Инкапсуляция
- •15.2. Встроенные функции
- •15.3. Классы. Скрытие данных
- •15.4. Конструкторы
- •15.5. Статические члены класса
- •15.6. Друзья класса
- •15.7. Копирование объектов класса
- •15.8. Управление доступом
- •15.9. Ссылка на себя
- •15.10. Деструкторы
- •Задачи -. Работа с классами
- •Глава 16. Программы из нескольких файлов
- •16.1. Работа с проектами
- •16.2. Область действия имен
- •16.3. Заголовочные файлы
- •16.4. Пространства имен
- •Задачи -. Работа со стеком
- •Глава 17. Перегрузка операторов
- •17.1. Правила перегрузки операторов
- •Задачи -. Перегрузка операторов
- •Глава 18. Конструктор копирования и оператор присваивания
- •18.1. Проблемы при копировании
- •Задачи -. Конструктор копирования
- •Глава 19. Ввод и вывод
- •19.1. Вывод
- •19.2. Ввод
- •19.3. Ввод и вывод определяемых пользователем типов
- •19.4. Работа с файлами
- •Глава 20. Взаимоотношения классов
- •20.1. Объекты как члены класса
- •20.2. Конструкторы встроенных типов
- •20.3. Наследование
- •20.4. Виртуальные функции
- •20.5. Абстрактные классы
- •20.6. Совместимость типов
- •20.7. Множественное наследование
- •Задачи -. Наследование классов
- •Глава 21. Шаблоны, исключения
- •21.1. Шаблоны
- •21.2. Шаблоны функций
- •21.3. Классы и шаблоны
- •21.4. Обработка исключений
- •21.5. Стандартная библиотека шаблонов
- •Литература
- •Предметный указатель
Символы и строки 109
цикла три выражения присваивания объединяются запятой в единое выражение.
Присваиванием j = strlen(s) -1 переменная j получает значение номера последнего символа строки, который на единицу меньше длины строки, так как нумерация элементов массива начинается с нуля.
Обмен начальных и конечных символов производится в цикле for, в котором i увеличивается, а j уменьшается до тех пор, пока их значения не сравняются, то есть пока не будет достигнута середина строки.
Далее приводятся результаты трех запусков программы.
Введите строку: qwerty Реверсированная строка: ytrewq qwerty<ytrewq
Результат сравнения строк rez = -8
Введите строку: 12345 Реверсированная строка: 54321 12345<54321
Результат сравнения строк rez = -4
Введите строку: kazak Реверсированная строка: kazak kazak=kazak
Результат сравнения строк rez = 0
Из этих результатов видно, что strcmp возвращает разность кодов первых несовпадающих символов строк или 0, если строки совпадают.
Задачи -. Символы и строки
В задачах, требующих посимвольного ввода, используйте функцию cin.get().
97.Напишите программу, которая относит вводимый символ к одному из четырех типов: цифры, большие латинские буквы, малые латинские буквы, все остальные символы.
98.Напишите программу, ожидающую нажатия любой клавиши. Если при нажатии клавиши вводится символ, имеющий специальное представление, указанное в табл.30, напечатайте его название, иначе выводите сам символ.
99.Напишите программу подсчета числа вводимых символов, используя цикл while.
100.Напишите программу подсчета пробелов, табуляций, символов новая строка.
101.Напишите программу, копирующую символы ввода в
выходной поток и заменяющую стоящие подряд пробелы, на один пробел.
1108
102.Напишите программу, копирующую символы ввода в
выходной поток с заменой символа табуляции на \t и каждой обратной наклонной черты на \\. Это сделает видимыми все символы табуляции и обратной наклонной черты.
103.Напишите программу, печатающую кодовую таблицу в виде:
СИМВОЛ КОД СИМВОЛ КОД …
Добейтесь, чтобы символы и их коды образовывали на экране ровные столбцы.
104. Напишите программу, печатающую коды, генерируемые при нажатии любой клавиши или комбинации клавиш. Используйте функцию getch() (заголовочный файл conio.h). Данная функция трактует нажатие отдельной клавиши или комбинации клавиш как генерацию одноили двухбайтового кода. Если генерируется двухбайтовый код, то первый его байт нулевой.
Строка символов – это массив, элементами которого являются символы. Важно помнить, что для работы со строками под них нужно выделять память. Необходимую память следует выделять с некоторым запасом. Конец строки фиксируется символом с кодом нуль ’\0’. Все функции, работающие со строками, должны обрабатывать символы в массиве, пока не обнаружат символ конца строки.
105.Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд пробелы на один пробел.
106.Напишите программу, удаляющую из строки s1 все символы, входящие в строку s2.
107.Напишите программу, осуществляющую циклическую перестановку символов в строке: второй символ ставится на место первого, третий - на место второго и т.д., первый символ ставится на место последнего. Выводите строку после каждого преобразования в одно и то же место экрана, чтобы создать эффект "бегущей строки".
108.Напишите функцию atoi, для преобразования строки десятичных цифр, в начале которой может стоять знак + или –, в целое значение.
109.Напишите функцию, формирующую целое значение по строке из нулей и единиц, кодирующей это целое значение в двоичной форме,
ивызывающую ее главную функцию.
110.Напишите функцию, формирующую целое число по строке шестнадцатеричных цифр. Кроме обычных десяти цифр 0, ... , 9, в шестнадцатеричной системе используются цифры A, B, C, D, E, F (или a, b, c, d, e, f) для кодирования значений 10, 11, 12, 13, 14, 15
соответственно. В C++ принято начинать запись шестнадцатеричного
Символы и строки 111
представления целого числа с 0x или 0X, поэтому функция должна проверять первые два символа строки.
111.Напишите функцию strcat, помещающую строку t в конец
строки s.
112.Напишите программу, переставляющую k последних символов строки s в начало строки без изменения порядка их расположения. Первые символы строки s должны быть сдвинуты вправо на k позиций.
113. Напишите функцию int any(char s[], char t[]), которая возвращает либо позицию первого символа строки s, совпадающего с любым из символов строки t, либо –1, если ни один символ s не совпал с символами из t.
114.Напишите функцию int strindex(char s[], char t[]), которая выдает позицию самого правого вхождения строки t в строку s или -1, если вхождения не обнаружено.
115.Напишите программу, выводящую в алфавитном порядке заглавные латинские буквы 'A', ... , 'Z', входящие в строку s. Буква выводится один раз, если входит в строку, и не выводится, если в строку не входит.
116.Напишите программу, печатающую заглавные буквы 'A',..., 'Z', входящие в строку s, и числа вхождений этих букв.
117.Напишите программу, печатающую Вам приветствие с указанием фамилии, имени, отчества, которые выводите в отдельные строки.
118.Напишите функцию itoa(int n, char s[]), формирующую строку цифр s, дающую представление целого n в десятичной системе счисления.
119.Напишите функцию itox(int n, char s[]), которая переводит целое n в строку s, представляющую число n в шестнадцатеричном виде.
120.Напишите программу, формирующую строку, состоящую из символов '0' и '1', дающую двоичное представление величины x целого типа. Указание. Двоичные разряды, кодирующие x, можно получать, осуществляя последовательное деление x на 2 и находя остаток. Удобно использовать условное выражение
s[i] = (x%2==1)?'1':'0'; |
//s[i] - очередной символ |
121. Напишите функцию escape(char s[], char t[]), копирующую строку t в s и преобразующую символы типа новая строка и табуляция в "видимые последовательности символов" типа \n и \t. Используйте оператор switch. Указание. Символы типа '\n', '\t' следует заменять строками символов "\\n", "\\t".