Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП - Практичне заняття 18-19.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
111.1 Кб
Скачать

Символьные массивы (строки)

При объявлении символьного массива (типа char), даже в том случае, если мы не производим его инициализации и он является локальным, все элементы массива по-умолчанию получают значение нулей-терминаторов. При этом, метод cout, получающий в качестве аргумента указатель на символьный массив, начинает вывод на экран с элемента, связанного с данным указателем (т.е. с начального) и продолжает до первого встреченного нуля-терминатора.

Это позволяет нам отправлять на вывод символьный массив, не передавая методу cout его размера.

Признаком окончания вывода является символ нуля-терминатора ('\0').

Метод cin в качестве своего аргумента также может принимать указатель на символьный массив, куда будет записана строка введённая с клавиатуры, при этом, за последним элементом строки метод cin автоматически разместит нуль-терминатор. Более того, при задании строковой константы (когда строка явно задаётся в двойных кавычках в коде программы), вслед за последним символом в строке также автоматически размещается нуль-терминатор. Соответственно, длина строки будет на один символ больше, чем мы явно укажем.

char str[] = "Privet"; // в массиве 7 элементов: 6 латинских букв и нуль-терминатор cout << sizeof(str) << endl; // 7 cout << str << endl; // Privet - вывелась вся строка *(str+3) = '\0'; // вместо 'v' записали нуль-терминатор в массив cout << str << endl; // Pri - вывелась часть строки до нуль-терминатора

Обойти строку, обратившись по отдельности к каждому её символу, можно примерно так (в данном случае мы выведем на отдельной строке каждый символ и его код по символьной таблице):

char str[] = "Privet"; char* p = str; while(*p != '\0') {     cout << *p << ' ' << (short) *p << endl;     p++; }

Этого же результата можно было добиться более изящно (но менее понятно), совместив ряд операций (разыменование, инкремент, автопреведение к bool) в одной строке:

char str[] = "Privet"; char* p = str - 1; while(*p++) {     cout << *p << ' ' << (short) *p << endl; }