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

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

Описание символьных массивов

Символьные массивы

Лекция 13

Символьный массив – это совокупность символов.

Синтаксис описания символьных массивов следующий:

char имя массива[размер];

Пример: char а [15];

В символьных массивах так же, как и в числовых допускаются операции над их отдельными элементами: a[0]=’E’; a[1]= ‘P’; a[2]= ‘9’; a[3]=’ >’; В результате этих операций присваивания в первых четырех ячейках массива будут размещены символы:

Е Р   >

В соответствии со стандартом ASCII (American Standard Code for Information Interchange) каждый символ имеет свой числовой код. Символы а и А имеют различные числовые коды, поэтому они воспринимаются как различные символы. Символ 9 воспринимается не как число, а как символ.

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

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

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

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

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

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

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

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

char name[ ] = “Ivanov”;

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

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

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);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: