9.1.3.Строки
Массив из символов (элементов типа char) часто называется строкой. Строки позволяют хранить фразы на естественном языке, например, на русском.
При выводе на экран и выполнении других операций со строками нужно знать, какое количество символов хранит строка. Например, если имеется массив для хранения имени пользователя, состоящий из 25 символов, то для пользователя «Василий» нужно при печати выводить только первые 7 символов.
Наиболее удобно оказалось хранить информацию о реальной длине строки непосредственно в массиве символов. Для этого используется специальный символ, обозначаемый как «\0». Функция, работающая со строкой, например, печатающая ее, будет обрабатывать все элементы по порядку, пока не встретит символ «\0».
Для удобства записи массива символов можно использовать строковые константы. Строковые константы представляют собой набор символов, заключенных в двойные кавычки. Например, следующее объявление создаст массив из 7 символов:
char a[] = “Привет”;
Символ a[0] будет равен 'П', символ a[5] – 'т', а символ a[6] будет равен '\0'. Обратите внимание, что если записать символ в двойных кавычках, то это будет строка, заканчивающаяся на'\0', а если в одинарных – это один символ. Так запись “П” будет состоять из двух символов, а запись 'Пр’ вызовет ошибку.
Для удобства работы со строками функции форматированного ввода-вывода («printf()» и «scanf()») содержат специальный спецификатор строки – «%s». Например, напечатать объявленную выше строку можно следующим образом:
printf(“%s”, a);
Для работы со строками в языке С++ есть специальная стандартная библиотека – string.h. Например, следующая функция копирует (переписывает) строку scr в строку dest:
strcpy(dest, scr);
С полным списком функций этой библиотеки можно ознакомиться в [1].
9.1.4.Структуры
Массивы позволяют эффективно работать с большим количеством однотипных данных. Однако в некоторых случаях в программе требуется группа данных различного типа. Например, для хранения информации о товаре необходимы одна строка для хранения названия товара и переменная целого типа для хранения его цены.
В этом случае целесообразно применить еще один элемент языка С++ – структуру (в других языках аналогичный элемент часто называется записью). В отличие от массива структура может содержать переменные произвольного типа. Поэтому перед использованием структуру нужно объявить, т.е. описать те переменные, которые она содержит. Для примера с товаром объявить структуру можно следующим образом:
struct tovar
{
char name[20];
int price;
};
Это объявление сообщает компилятору, что структура tovar содержит поля name и price. Компилятор вычисляет необходимый для структуры объем памяти и смещение полей относительно начала структуры.
Можно сказать, что объявление структуры фактически создало новый тип. После этого объявления можно создавать и использовать переменные, имеющие тип объявленной структуры. Например:
tovar a,b;
После таких объявлений компилятор отведет под переменные a и b необходимое место в памяти.
При объявлении переменной, имеющей тип структуры, ее можно сразу инициализировать. Инициализация структуры аналогична инициализации массива:
tovar a={”мыло”, 100};
Поскольку поля в структуре занимают различный объем, для обращения к ним нельзя использовать операцию индексирования. Для этого используют операцию обращения к полю, которая обозначается точкой. Например:
a.price = 10;
Для данного примера компилятор создаст код, который прибавит к адресу структуры a смещение поля price, вычисленное при объявлении структуры. По полученному адресу и будет записано число 10 – цена товара. Аналогичным образом происходит обращение к полю и в случае, если нужно получить его значение.
