Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lect10.doc
Скачиваний:
7
Добавлен:
20.05.2014
Размер:
67.58 Кб
Скачать

** vcp1 ** 23.04.2004

Лекция 10 Mixtum Compositum

    1. Символьные переменные и массивы

Помимо рассмотренных выше типов для вещественных и комплексных значений

(int, float, double, complex) очень важен символьный тип (char) . Например, возможности символьной обработки определяют эффективность разработки

программ для многих приложений в гуманитарной сфере, которая

в очень малой степени связана с численными расчетами.

Для символьных переменных оператор описания типа имеет вид

char имя; например, char sm, symbol, a ;

Слово “character” означает “буква или иероглиф” (англ. яз.).

Каждой переменной типа char отводится 1 байт в ОП. Этот байт позволяет хранить

код буквы в виде целого числа от 0 до 255 ( или от –128 до 127). Отметим разную

кодировку символов для DOS и для Windows. Код символа можно вывести,

например, так: cout << (int) sm; или cout << int (sm) ;

Уже есть новый код Unicode, использующий 2 байта для каждого символа.

Присваивание значения символьной переменной выполняется обычным образом, причем для символьной константы используются одиночные кавычки ( апострофы).

Сравним присваивания для char и int :

char a = ‘$’; int b = 1;

a = ‘s’ ; b = 12;

char a1 = a; int b1 = b;

Массив символов объявляется обычным образом, например,

char A[ 80];

Здесь в скобках указывается количество символов в массиве. Он может быть

двумерным: char M[5][80]; В этом случае его можно рассматривать как матрицу из

символов. Так, в массиве M имеем 5 строк матрицы и в каждой строке 80 символов.

Напомним, что индексы всегда нумеруются с нуля.

Если последним символом символьного массива сделать нулевой байт, то

получаем строку. Нулевой байт - это символ '\0' с десятичным кодом 0 , т.е.

( int ) '\0' = 0. Следовательно, строка символов представляется одномерным символьным массивом с нулевым байтом в конце.

Нулевой байт должен учитываться при выделении памяти для массива.

Специального строкового типа в С++ нет.

Например, слово “МИЭМ” можно хранить в виде массива четырех или пяти байтов:

char M1[4] = {‘M’,’И’, ’Э’, ’М’}; (10.1)

или

char M1[5] = {‘M’,’И’, ’Э’, ’М’, ‘\0’}; (10.2)

При втором способе, т.е. хранении в виде строки, возможно использование

специальных функций для обработки строк, что очень удобно ( см. лекцию 13).

В (10.2) использована обычная инициализация массива M1 ( см. раздел 7.1).

Но можно эту запись упростить, используя строку в кавычках:

char M1[5] = “ MИЭМ ”; (10.3)

При таком способе инициализации в конце будет автоматически добавлен

нулевой байт. Оператор (10.3) можно ещё упростить, опустив значение в

квадратных скобках – длину массива:

char M1[ ] = “MИЭМ”; (10.4)

Здесь длина массива будет определена компилятором по количеству

символов в строке справа. В описаниях (10.1) - (10.3) можно

память для массивов выделять с запасом, т.е. в массивах могут быть

неопределенные элементы. Ещё раз отметим, что

кавычки используются для строк, а апостроф для одиночных символов.

Инициализации (10.2), (10.3), (10.4) эквивалентны, но (10.4) наиболее удобна.

Отличие их от (10.1) в том, что для работы со строками можно использовать

как отдельные их символы, так и специальные строковые функции,

а в случае (10.1) возможна работа только с отдельными символьными элементами.

Например, для любой из форм (10.1 - 10.4), возможны такие операторы:

cout << “ Символ = ” << M1[2];

cout << “Код символа = ” << (int) M1[2];

При вводе строки символ конца строки ‘\0’ не вводится, а вместо него нажимается

клавиша ЕNTER, что соответствует его добавлению.

Соседние файлы в папке Лекции