18. Одномерные массивы. Обработка строк.
Массив представляет собой структуру данных, позволяющую хранить под одним именем совокупность данных любого, но только одного какого-то типа. Массив характеризуется своим именем, типом хранимых элементов, размером (числом хранимых элементов), нумерацией элементов и размерностью.
Объявление переменной как одномерного массива имеет вид:
тип переменная [константное выражение]
Например, оператор
int A[10];
объявляет массив с именем A, содержащий 10 целых чисел. Доступ к элементам этого массива осуществляется выражением A[i], где i — индекс, являющийся в данном примере, как видно из объявления, целым числом в диапазоне 0 — 9. Например, A[0] — значение первого элемента, A[1] — второго, A[9] — последнего. Обратите внимание, что индекс последнего элемента на 1 меньше размера массива. Это связано с тем, что индексы начинаются с 0.
Элементы массива могут иметь любой тип. Например, предложение
char S[10];
объявляет массив символов. Массив символов — это фактически строка и с ним можно во многом обращаться как со строкой, хотя можно обращаться и как с массивом. При использовании массива символов как строки надо только иметь в виду, что это строка фиксированной допустимой длины. И число символов, помещаемых в строку, не должно превышает объявленного размера массива n — 1, поскольку строка кончается нулевым символом.
Объявление переменной массива можно совмещать с заданием элементам массива начальных значений. Эти значения перечисляются в списке инициализации после знака равенства, разделяются запятыми и заключаются в фигурные скобки. Например:
int A[10] = {1,2,3,4,5,6,7,8,9,10};
char S[10] = {"abcdefghi\0"};
Если начальных значений меньше, чем элементов в массиве, оставшиеся элементы автоматически получают нулевые начальные значения. Например, оператор int A[10] = {1,2,3}; задает значения первым трем элементам, а остальные будут равны 0. Оператор int A[10] = {0}; присваивает нулевые значения всем элементам массива.
Если массив при его объявлении не инициализирован, то они принимают случайные значения. Это может привести к ошибкам в программе. В массивах символов задание нулей элементам, не указанным в списке инициализации, равносильно заданию нулевых символов, означающих конец строки.
В объявлении со списком инициализации размер массива можно не указывать. Тогда количество элементов массива будет равно количеству элементов в списке начальных значений. Например, объявление int A[ ] = {1, 2, 3, 4, 5}; создает массив из пяти элементов. Объявление
char S1[ ] = {"abc"};
создает массив из четырех элементов — три значащих символа плюс нулевой символ.
В объявлении массива в качестве размера лучше всегда использовать именованные константы. Тогда при необходимости изменить размер массива вам достаточно изменить его только в одном операторе, объявляющем размер.
Обработка строк
В С++ символьная строка представляются в виде массива символов, который заканчивается нулевым стволом ‘\0’ (символ завершения строки). При объявлении символьного массива необходимо учитывать наличие нулевого символа и выбирать размер массива на 1 больше. Например, для строки S на 10 символов надо использовать команду char S[11].
Строковые значения заключаются в двойные кавычки, и при записи в массив, нулевой символ добавляется автоматически. Пример: char S[11]=”Привет!”;
Строка “” называется нулевой и содержит только нулевой символ завершения строки.
Некоторые функции обработки срок:
- strcpy(dest, src) - копирует строку src в dest; возвращает dest.
- strcat(Dest, Source, MaxLen) - копирует до MaxLen символов строки Source в конец строки Dest и возвращает Dest.
- strcmp(S1, S2) - cсравнивает строки S1 и S2 с учетом регистра результат < 0 при S1< S2, = 0 при S1= S2, > 0 при S1> S2.
- strlen(S) - возвращает число символов в S, не считая нулевого символа в конце.
Для использования указанных функций обработки строк, необходимо подключить модуль string.h используя команду #include < string.h >.