Выбрать главу

В следующем примере массив sqrs объявляется как "безразмерный".

int sqrs[][2] = {

 1, 1,

 2, 4,

 3, 9,

 4, 16,

 5, 25,

 6, 36,

 7, 49,

 8, 64,

 9, 81,

 10, 100

};

Преимущество такой формы объявления перед "габаритной" (с точным указанием всех размерностей) состоит в том, что программист может удлинять или укорачивать таблицу значений инициализации, не изменяя размерности массива.

Массивы строк

Существует специальная форма двумерного символьного массива, которая представляет собой массив строк. В использовании массивов строк нет ничего необычного. Например, в программировании баз данных для выяснения корректности вводимых пользователем команд входные данные сравниваются с содержимым массива строк, в котором записаны допустимые в данном приложении команды. Для создания массива строк используется двумерный символьный массив, в котором размер левого индекса определяет количество строк, а размер правого — максимальную длину каждой строки. Например, при выполнении следующей инструкции объявляется массив, предназначенный для хранения 30 строк длиной 80 символов,

char str_array[30][80];

Массив строкэто специальная форма двумерного массива символов.

Получить доступ к отдельной строке довольно просто: достаточно указать только левый индекс. Например, следующая инструкция вызывает функцию gets() для записи третьей строки массива str_array.

gets(str_array[2]);

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

// Вводим строки текста и отображаем их на экране.

#include <iostream>

#include <cstdio>

using namespace std;

int main()

{

 int t, i;

 char text[100][80];

 for(t=0; t<100; t++) {

  cout << t << ": ";

  gets(text[t]);

  if(!text[t] [0]) break; // Выход из цикла по пустой строке.

 }

 // Отображение строк на экране.

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

  cout << text[i] << ' \n';

 return 0;

}

Обратите внимание на то, как в программе выполняется проверка на ввод пустой строки. Функция gets() возвращает строку нулевой длины, если единственной нажатой клавишей оказалась клавиша <Enter>. Это означает, что первым байтом в строке будет нулевой символ. Нулевое значение всегда интерпретируется как ложное, но взятое с отрицанием (!) дает значение ИСТИНА, которое позволяет выполнить немедленный выход из цикла с помощью инструкции break.

Пример использования массивов строк

Массивы строк обычно используются для обработки таблиц данных. Рассмотрим, например, упрощенную базу данных служащих, в которой хранится имя, номер телефона, количество часов, отработанных служащим за отчетный период, и размер почасового оклада для каждого служащего. Чтобы создать такую программу для коллектива, состоящего из десяти служащих, определим четыре массива (из них первые два будут массивами строк).

char name[10][80]; // Массив имен служащих.

char phone[10][20]; // Массив телефонных номеров служащих.

float hours[10]; // Массив часов, отработанных за неделю.

float wage[10]; // Массив окладов.

Чтобы ввести информацию о каждом служащем, воспользуемся следующей функцией enter().

// Функция ввода информации в базу данных.

void enter()

{

 int i;

 char temp[80];

 for(i=0; i<10; i++) {

  cout << "Введите фамилию: ";

   cin >> name[i];

  cout << "Введите номер телефона: ";

   cin >> phone[i];

  cout << "Введите количество отработанных часов: ";