Обращение к элементам массива.
Важно помнить, что C++ всегда использует 0 для индекса первого элемента массива, а индекс последнего элемента на единицу меньше размера массива.
Массив позволяет программам хранить несколько значений внутри одной и той же переменной. Для обращения к определенному значению внутри массива программы используют индекс. Говоря кратко, значение индекса указывает требуемый элемент массива. Все массивы C++ начинаются с элемента с индексом 0. Например, следующий оператор присваивает значение 100 первому элементу массива с именем scores:
scores[0] = 100;
Когда программа объявляет массив, она указывает количество элементов, которые массив может хранить. Например, следующий оператор объявляет массив, способный хранить 100 значений типа int.
int scores[100];
В данном случае массив представляет собой элементы от scores[0] до scores[99].
При объявлении массива можно указать первоначальные значения, поместив их между левой и правой фигурными скобками, следующими за знаком равенства. Например, следующий оператор инициализирует массив values:
int values[5] = { 100, 200, 300, 400, 500};
Подобным образом следующее объявление инициализирует массив с плавающей точкой:
float salaries[3] = { 25000.00. 35000.00, 50000.00};
Если вы не указываете первоначальное значение для какого-либо элемента массива, большинство компиляторов C++ будут инициализировать такой элемент нулем. Например, следующее объявление инициализирует первые три из пяти элементов массива:
int values[5] = { 100, 200, 300};
Программа не инициализирует элементы values[3] и values[4]. В зависимости от вашего компилятора, эти элементы могут содержать значение 0. Если вы не указываете размер массива, который вы инициализируете при объявлении, C++ распределит достаточно памяти, чтобы вместить все определяемые элементы. Например, следующее объявление создает массив, способный хранить четыре целочисленных значения:
int numbers[] = { 1, 2, 3, 4 };
Строка как массив символов
Строка есть последовательность символов, заключенная в двойные кавычки: "...". Строка имеет тип "массив символов" и класс памяти static, она инициализируется заданными символами. Все строки, даже если они записаны одинаково, различны. Компилятор располагает в конце каждой строки нулевой (пустой) байт \0 с тем, чтобы сканируюшая строку программа могла найти ее конец.
Массив char можно инициализировать строкой. Последовательные символы строки инициализируют члены массива. Например:
char msg[] = "Syntax error on line";
демонстрирует массив символов, члены которого инициализированы строкой. Обратите внимание, что sizeof(msg)==25.
Любая символьная константа, например "ОЙ У ПОЛИ КРИНИЧКА", представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом "\0", так что любая программа может по нему легко обнаружить конец строки. Поэтому строка занимает в памяти на один символ больше, чем записано между двойными кавычками. Нумерация элементов массива начинается с нуля. Надо помнить, что, например 'T' - это символ(буква), а ' T ' - это строка, состоящая из двух символов: 'T' и '\0'. Отсюда следует, что пустых строк не бывает.
Строка в языке Си - это разновидность константы и ее можно присваивать некоторой переменной, представляющей массив символов:
char str[]="ТЕКСТ";
Такая запись и короче и понятнее, чем общепринятая для начальной инициализации массивов:
char str[]={'Т','Е','К','С','Т',};
Если длина строки в квадратных скобках опущена, то она определяется автоматически, по количеству присваиваемых символов. В приведенном выше примере она равна шести.
Запишем программу (пример ), в которой функция main формирует строку по указанному выше правилу и вызывает функцию length,которая в качестве аргумента получает начальный адрес этой строки и вычисляет ее длину(без учета завершающего символа). Эта функция представляет собой самостоятельный интерес и будет использована нами а дальнейшем как библиотечная.
Пример
/*длина строки*/ void length(s); char s[]; { int l=0; while(s[l]!='\0') i++; return(i); } #include <iostream.h> main() { static char str[]="ОЙ У ПОЛИ КРИНИЧКА"; cout<<length(str); } |
С помощью функций стандартной библиотеки языка реализованы часто используемые операции над строками. В большинстве своем в качестве строк они используют указатели. Прежде чем использовать их, нужно подключить библиотеку string.h.
strlen(st) возвращает длину строки st в байтах, не считая последнего завершающего байта
strcmp(st1,st2) сравнивает две строки по алфавиту. Если строка st1 стоит раньше по алфавиту чем st2, то результат функции меньше нуля, если позже – больше нуля, если равны – равна нуля. Функция целочисленная.
strcpy(k,st) копирует одну строку st по адресу k, включая нулевой байт. В качестве результата функция возвращает адрес первой строки.
strcat(k,st) –присоединяет вторую строку к концу первой, включая завершающий нулевой байт. На его место в первой строке переписывается первый символ второй строки. В качестве результата функция возвращает адрес первой строки, где по адресу k получается склеенная строка.