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

Символы, строки

Базовый тип данных char в С/С++ понимается двояко: как байт - минимальная адресуемая единица представления данных в компьютере, и как символ текста. Такая двоякость возникает в результате установления соответствия в компьютерах между символами и присвоенными им значениями целой переменной (кодами). Любое устройство, отображающее символьные данные, при получении любого кода выводит соответствующий ему символ. Аналогично клавиатура (совместно с драйвером) кодирует нажатие любой клавиши с учетом регистровых и управляющих клавиш в соответствующий ей код.

Например:

Сивол

Код

Сивол

Код

' '

0x20

'B'

0x42

'*'

0x2A

'Y'

0x59

'0'

0x30

'Z'

0x5A

'1'

0x31

'a'

0x61

'9'

0x39

'b'

0x62

'A'

0x41

'z'

0x7A

Тип данных char не имеет никаких ограничений на выполнение операций, допустимых для целых переменных: от операций сравнения и присваивания до арифметических операций и операций с отдельными битами.

Для представления отдельных символов можно пользоваться символьными (литерными) константами, которые представляют собой символ, заключенный в одинарные кавычки (апострофы). Транслятор вместо такой константы всегда подставляет код соответствующего символа, например:

char c;

for (c= 'A'; c <= 'Z'; c++) ...

for (c=0x41; c <=0x5A; c++) ...

Существует ряд кодов так называемых неотображаемых символов, которым соответствуют определенные действия при вводе-выводе символьных данных. Например, символу с кодом 0x0D ("возврат каретки") соответствует перевод курсора в начало строки. Для их представления в программе используются символьные константы, начинающиеся с обратной косой черты:

Константа

Код

Название

Действие

\a

0x07

bel

Звуковой сигнал

\b

0x08

bs (backspase)

Курсор на одну позицию назад

\f

0x0C

ff (form feed)

перевод формата

Переход к началу следующей страницы

\n

0x0A

lf (line feed)

перевод строки

Переход на одну строку вниз

\r

0x0D

cr (carriage return)

возврат каретки

Возврат на первую позицию строки

\t

0x09

ht (horizontal tab)

Переход к позиции в строке кратной 8 (табуляция)

\v

0x0B

vt (vertical tab)

Вертикальная табуляция по строкам

\\ \' \" \?

Представление символов \, ', ", ?

\OOO

Символ с восмеричным кодом ООО

\xHH

Символ с шестнадцатеричным кодом HH

\0

Символ с кодом 0

Некоторые программы и стандартные функции обработки символов и строк (isdigit, isalpha) используют факт, что цифры, прописные и строчные (маленькие и большие) латинские буквы упорядочены по возрастанию значений кодов:

'0' - '9' 0x30 - 0x39

'A' - 'Z' 0x41 - 0x5A

'a' - 'z' 0x61 - 0x7A

Рассмотрим фрагменты, использующие эти особенности кодирования.

Получить символ десятичной цифры из значения целой переменной, лежащей в диапазоне 0..9:

int n;

char c;

c = n + '0';

Получить символ шестнадцатеричной цифры из значения целой переменной, лежащей в диапазоне 0..15:

if (n <=9) c = n + '0';

else c = n - 10 + 'A';

Получить значение целой переменной из символа десятичной цифры:

if (c >='0' && c <='9') n = c - '0';

Получить значение целой переменной из шестнадцатеричной цифры:

if (c >='0' && c <='9') n = c - '0';

else

if (c >='A' && c <='F') c = c - 'A' + 10;

Преобразовать маленькую латинскую букву в большую:

if (c >='a' && c <='z') c = c - 'a' + 'A';

Строкой называется последовательность символов, ограниченная символом с кодом 0, то есть '\0'. Из ее определения видно, что она является объектом переменной размерности. Поскольку в Си допускаются переменные только фиксированной размерности, то единственным допустимым способом представления строки является массив символов.

Строка хранится в массиве символов, массив символов может быть инициализирован строкой, а может быть заполнен программно:

char str[20] = { 'С','т','р','о','к','а','\0' };

char str[] = “Строка”;

char *str= “Строка”;

int i;

char str[80];

for (i=0; i<20; i++) str[i] = 'A';

str[20] = '\0';

Cтрока имеет переменную размерность, ограниченную символом '\0', поэтому работать с ней можно, просматривая ее от начала до конца, пока не встретится символ '\0':

for (i=0; str[i] !='\0'; i++)...

Соответствие размерности массива и длины строки транслятором не контролируется:

char s[20];

// необходимо следить за переполнением массива

// и ограничить строку его размерностью

for (i=0; i<19 && B[i]!='\0'; i++)

s[i] = B[i];

s[i]='\0';

Строковой константой называется последовательность символов, заключенная в двойные кавычки. Допустимо использование неотображаемых символов. Строковая константа автоматически дополняется символом '\0', ею можно инициализироваться массив, в том числе такой, размерность которого определяется размерностью строки:

char A[80] = "123456\r\n";

char B[] = "aaaaa\033bbbb";

..."Это строка"...

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]