Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Лекции. 2009. Измайлов.doc
Скачиваний:
9
Добавлен:
26.10.2018
Размер:
4 Mб
Скачать

13.2. Ввод символьных массивов

Символьные массивы можно вводить путем инициализации при описании. Синтаксис:

сhar имя массива[размер]={‘c1’,’c2’,’c3’, …, ‘cn’};

Здесь с1, с2, с3, …, cn – символы, из которых состоит массив.

Можно инициализировать символьный массив по–другому:

сhar имя массива[размер]={“символы”};

Например: сhar В[10]={“ЭАПУ2008”};

В этом случае компилятор автоматически добавляет в конце строки null, означающее число 0. null является признаком окончания строки. Последовательность символов, заключенная в кавычки называется строкой. Строка всегда заканчивающаяся нулем. В приведенном примере под символьный массив ЭАПУ2008 фактически будет использовано не восемь (по количеству символов), а девять позиций. Девятую позицию будет занимать символ признака окончания строки 0.

Можно инициализировать символьный массив без указания размера массива. Например:

char name[ ] = “Ivanov”;

Здесь не указан размер массива (квадратные скобки пустые). Он устанавливается по факту плюс позиция под знак признака окончания строки. В приведенном примере это соответствует семи позициям. Такая форма инициализации удобна тем, что избавляет от необходимости подсчитывать количество позиций для массива.

13.3. Операции со строками

В отличие от числовых переменных строки нельзя сравнивать и применять к ним операцию присваивания. Например, пусть описаны два следующих символьных массива:

char A[ ]= “ЭАПУ2008а”;

char B[ ]= “ЭАПУ2008б”;

Операция А = В в этом случае не будет выполняться даже, несмотря на то, что размеры этих массивов одинаковы.

В языке С++ имеются специальные функции для работы с символьными (строковыми) массивами. Все они содержаться в стандартной библиотеке языка С++, в заголовочном файле string.h и stdlib.h. Ниже приводятся часто употребляемые функции из этой группы.

Функция sizeof ( )

Функция sizeof ( ) определяет размер массива. Оператор вызова этой функции устанавливает размер описанного массива в виде целого числа. Использование этой функции очевидно для случая описания массива в виде:

char S[ ]= “Результаты вычисления токов в разветвляющихся цепях”;

Определить количество символов в этом массиве можно, но это утомительно и иногда может привести к ошибке.

Другую причину применения этой функции можно увидеть, например, при отладке программы, когда первоначальный размер массива, например, 40 в окончательной версии будет иметь 50. Это означает, что во всех местах программы, где используется размер массива, следует вносить изменения. Например:

char MS[40];

. . . . . . . . . . . .

for (i= 0; i < 40; i ++)

. . . . . . . . . . . . . . . . . . .

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

char MS[40];

. . . . . . . . . . . .

for (i= 0; i < sizeof(MS); i ++)

. . . . . . . . . . . . . . . . . . .

Функция strlen( )

Эта функция определяет длину строки (без учета символа null). Например:

char S1[50]=”Характеристики электродвигателей”;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

cout << strlen(S1);

На экран будет выведено число 32. Пробел также так же кодируется, как и другие символы, и учитывается как символ. Размер строки 32 и размер массива 50, как видно, не одно и то же. 50 – это предельный размер массива. Длина строки может принимать различные размеры, но не превышать размер массива. Для указанного размера массива 50 предельная длина строки составит 49 (плюс символ null).

Функция strcmp( )

Эта функция посимвольно сравнивает две строки в соответствии с алфавитом и учетом регистра, то есть различает строчные и прописные буквы (А и а). Сравнение ведется до первой пары неодинаковых символов. После этого процесс сравнения прекращается и делается заключение о сравниваемых строках по результату сравнения неодинаковых символов пары, на которой прекратился процесс сравнения. Дальнейшие символы уже не рассматриваются. Не следует путать сравнение длин строк и посимвольное сравнение. Например, сравниваются две строки:

char S1[ ]= “abcd”;

char S2[ ]= “abdc”;

strcmp( S1, S2);

Результатом сравнения будет то, что строка S1 меньше строки S2. При по–парном сравнении символов обнаружится их различие в третьей паре: c и d. Код символа с меньше, чем код символа d, поскольку с стоит в алфавите раньше, чем d.

При сравнении строк возможны три варианта результата:

  • если строки S1= S2, то функция возвращает в качестве результата число 0;

  • если S1 < S2, то результатом будет отрицательное целое число;

  • если S1 > S2, то результатом будет положительное целое число.

Функция stricm( )

Эта функция сравнивает две строки посимвольно в соответствии с алфавитом, но без учета регистров символов. Здесь символы а и А воспринимаются одинаковыми. Процесс сравнения аналогичен тому, какой и в функции strcmp( ) и форма представления результата та же. Пример вызова функции:

stricm ( S1, S2);

Функция strcpy( )

Это функция позволяет копировать одну строку в другую. При этом необходимо соблюдать следующее условие: строка, которая копируется должна быть меньшей или равной той строке, в которую совершается копирование. Это объясняется тем, что строку меньшего размера всегда можно поместить в строке большего размера. В противном случае возникает ошибка. Пример:

char S1[ ] =”Ivanov”;

char S2[ ] =”Sidorov”;

. . . . . . . . . . . . . . . . . . .

strcpy(S2, S1 );

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

S1[ ] =”Ivanov”;

S2[ ] =”Ivanov”;

Копирование строки S2 (Sidorov) в строку S1 (Ivanov) приведет к ошибке, так как S2 > S1.

Следить за размерами строк – обязанность программиста.

Функция strcat ( )

Эта функция подсоединяет одну строку к другой. Операция подсоединения строк называется конкетацией.

Пример:

char S1[ ] =”abcd”;

char S2[ ] =”klm”;

. . . . . . . . . . . . . . . . . . .

strcat(S1, S2 );

Здесь S1 – строка, к которой подсоединяется, а S2 – строка, которая подсоединяется. В результате работы функции к первой строке подсоединяется вторая и получается новое содержание строки S1 – abcdklm.

Функция atoi ( )

Эта функция преобразовывает символьный массив в целое число. Как известно каждая цифра (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) может быть представлена символом. Поэтому любое число, хранящееся в компьютере, быть представлено набором символов и наоборот. Функция atoi ( ) как раз и преобразовывает символьный массив в число. Если массив состоит не из цифр, то функция возвращает ноль.

Синтаксис функции:

int atoi (char S[ ]);

Например:

cout << atoi(S);

Функция atof ( )

Эта функция преобразовывает символьный массив в вещественное число с плавающей точкой.

Синтаксис функции:

float atof (char S[ ]);

Функция itoa ( )

Эта функция преобразовывает целое число в символьный массив.

Синтаксис фнкции:

itoa (int m, char S[ ], int dec);

Здесь

  • mцелое число, которое преобразуется в символьный массив,

  • S результирующий символьный массив,

  • decоснование десятичной системы счисления.

Пример:

int k = 25;

char S[20];

. . . . . . . . . .

itoa(k, S, 10);

Функции itoa( ), atof( ), itoa( ) содержатся в заголовочном библиотечном файле stdlib.h.