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

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

gets(str_array[2]);

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

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

#include

#include

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

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

 return 0;

}

Обратите внимание на то, как в программе выполняется проверка на ввод пустой строки. Функция gets() возвращает строку нулевой длины, если единственной нажатой клавишей оказалась клавиша . Это означает, что первым байтом в строке будет нулевой символ. Нулевое значение всегда интерпретируется как ложное, но взятое с отрицанием (!) дает значение ИСТИНА, которое позволяет выполнить немедленный выход из цикла с помощью инструкции 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 << "Введите количество отработанных часов: ";

   cin >> hours[i];

  cout << "Введите оклад: ";

   cin >> wage[i];

 }

}

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

// Отображение отчета.

void report()

{

 int i;

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

  cout << name[i] << ' ' << phone[i] << '\n';

  cout << "Заработная плата за неделю: "<< wage[i] * hours[i];

  cout << '\n';

 }

}

Полностью программа базы данных служащих приведена ниже. Обратите особое внимание на то, как реализуется доступ к каждому массиву. Эта версия программы ведения базы данных служащих еще далека от совершенства, поскольку введенная в нее информация теряется сразу же по выходу из программы. Ниже в этой книге мы научимся сохранять информацию в дисковом файле.

// Простая программа ведения базы данных служащих.

#include

using namespace std;

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

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

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

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

int menu();

void enter(), report();

int main()

{

 int choice;

 do {

  choice = menu(); // Получаем команду, выбранную пользователем.

  switch(choice) {

   case 0: break;

   case 1: enter();

    break;

   case 2: report();

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги