- •Преобразование типов указателей
- •Операторы определения адреса и обращения по адресу
- •Указатели на константы и константные указатели
- •Арифметические действия с указателями
- •Одномерные и многомерные массивы.
- •Строки символов. Основные функции для работы со строками.
- •Перечисление.
- •Структура.
- •Объединения.
- •Битовые поля.
- •Тип данных bool. Тип данных wchar_t.
- •Способы передачи параметров в подпрограммы.
- •Операторы распределения памяти.
- •Объявление typedef.
- •Оператор sizeof.
- •Передача аргументов по умолчанию.
- •Встроенные функции.
- •Определение пространства имён.
- •Оператор разрешения области видимости.
- •Объявление «using». Директива «using». Псевдонимы.
- •Механизм обработки исключений.
- •Вложенные исключения.
- •Определение класса.
- •Указатель this. Спецификаторы доступа к членам класса.
- •«Друзья» класса.
- •Конструктор класса. Список инициализации.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Явные конструкторы.
- •Деструкторы.
- •Встроенные функции–члены класса. Статические члены класса.
- •Функции-члены класса с квалификаторами const и volatile.
- •Вложенные классы. Локальные классы.
- •Общие правила перегрузки операторов.
- •Перегрузка оператора присваивания.
- •Оператор индексирования [].
- •Перегрузка бинарных операторов.
- •Составные операторы присваивания.
- •Оператор вызова функции.
- •Операторы преобразования типов (конверторы).
- •Структура данных – стек.
- •Структура данных – очередь.
- •Деревья.
- •Наследование
- •Доступ к членам наследуемого класса
- •Конструкторы, деструкторы и наследование
- •Наследование и присваивание.
- •Виртуальные функции.
- •Полиморфизм и позднее связывание.
- •Передача аргументов по умолчанию в виртуальные функции.
- •Виртуальные деструкторы.
- •Абстрактные классы.
- •Множественное наследование.
- •Виртуальное наследование.
Строки символов. Основные функции для работы со строками.
Строкой называется массив символов, который заканчивается пустым символом. Обозначается этот символ ‘\0’ – рассматривается как один символ. Строка объявляется как обычный символьный массив:
char s1 [10];
В данном случае определяется массив длиной в 9 символов, т.к. 1 символ должен быть отведён под завершающий:
char *s2 - объявление строки
s2 – указатель на строку символов. Указатель – переменная, которая содержит адрес некоторой другой переменной.
s1 – также является указателем, но в отличие от s2, он является константным, т.е. указателем, которому нельзя присвоить значение.
s2 – переменная, которой можно присваивать значения.
Строковые константы заключаются в двойные кавычки. В отличие от символов, которые заключаются в одинарные кавычки.
При инициализации массива символов размерность массива лучше не указывать. Это действие выполнит компилятор, который подсчитает количество символов, добавит ещё 1 и поместит в конец строки пустой символ.
char s1 [] = “Гуманитарный факультет”;
Для работы со строками имеется большое количество функций, прототипы которых описаны в заголовочных файлах stdlib.h; string.h.
Поэтому при работе со строками необходимо подключать эти файлы. Для ввода строк с консоли служит функция char *gets (char *str);
Эта функция записывает строку по адресу str и одновременно возвращает адрес введённой строки. Функция прекращает ввод, если встретит символ ‘\n’ – переход на следующую строчку или логическую константу EOF – конец файла, если строка читается из файла.
Символ перехода на новую строчку в саму строку не помещается. Вместо этого в конец строки помещается пустой символ ‘\0’. При неудачной попытке чтения функция возвращает NULL.
Для вывода строки на консоль используется стандартная функция:
int puts (const char *s);
в случае удачи возвращает неотрицательное число, а в случае неудачи возвращает логическую константу EOF.
Рассмотрим основные функции, которые позволяют выполнять действия над строками:
Функции сравнения, копирования и объединения строк.
сравнение строк:
в этой группе функций, расположенных в string.h, используется 2 функции strcmp и strncmp.
Функция strcmp имеет вид:
int strcmp (const char *str1, const char *str2);
она лексикографически сравнивает сроки str1 и str2. Функция возвращает
-1, если str1 < str2;
0, если str1 = str2;
1, если str1 > str2;
При сравнении символов фактически сравниваются числовые коды этих символов.
Функция strncmp имеет вид:
int strncmp (const char *str1, const char *str2, int n);
эта функция лексикографически сравнивает только n первых символов в строках str1 и str2, возвращает:
-1, если str1 < str2;
0, если str1 = str2;
1, если str1 > str2;
пример:
char str1 [] = “aa bb”;
char str2 [] = “aa aa”;
char str3 [] = “aa bb cc”;
printf (“%d\n”, strcmp (str1, str3)); /*-1*/
printf (“%d\n”, strncmp (str1, str3, 5)); /*0*/
копирование строк:
используются 2 функции и находятся в string.h: strcpy, strncpy.
char*strcpy (const char *strDst, const char *strSrc);
копирует сроку strSrc в строку strDst. Строка strSrc копируется полностью вместе с завершающим нулевым байтом. Функция возвращает указатель на строку. Если строки перекрываются, то результат непредсказуем.
char *strncpy (const char *strDst, const char * strSrc, int n);
копируется n символов из строки strSrc в строку strDst и возвращается указатель на строку strDst.
Пример:
char str1 [80];
char str2 [] = “copy string”;
strcpy (str1, str2);
strncpy (str1, str2, 4);
соединение строк:
для объединения 2-х строк в одну используются 2 функции: strcat и strncat.
char *strcat (char *strDst, const char * strSrc);
эта функция присоединяет строку strSrc к строке strDst, стирая её нулевой байт. Если длина strSrc меньше, то присоединяются только символы strSrc, указатель возвращается на strDst.
пример:
char str1 [80] = “string”;
char str2 [] = “catenation”;
char str3 [] = “ yes no”
strcat (str1, str2); /*str1 = “string catenation”*/
strncat (str1, str3, 4); /*str1 = “string catenation yes”*/