ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 7) онлайн

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

Если возможно существование массива массивов, значит возможен и массив строк. На самом деле это довольно полезная конструкция. Рассмотрим пример STRARAY, в котором названия дней недели помещаются в массив:

 

// straray.cpp

// массив строк

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

int main ( )

{

  const int DAYS = 7; // количество строк в массиве

  const int MAX = 12; // максимальная длина каждой из них

  // массив строк

  char star [ DAYS ][ MAX ] =

  {

    "Понедельник", "Вторник", "Среда", "Четверг",

    "Пятница", "Суббота", "Воскресенье"

  };

  // вывод всех строк на экран

  for ( int j = 0; j < DAYS; j++ )

    cout << star [ j ] << endl;

  return 0;

}

 

Программа печатает все строки массива:

Понедельник

Вторник

Среда

Четверг

Пятница

Суббота

Воскресенье

Так как строки — это массивы, то будет верным утверждение, что star — мас- сив строк — в действительности является двумерным массивом. Его первая раз- мерность, DAYS, определяет, сколько строк в массиве. Вторая размерность, MAX, определяет максимальную длину строк (11 символов для строки «воскресенье» плюс 12-й завершающий нулевой символ). На рисунке 7.10 показано, как это выглядит.

Заметим, что некоторое количество памяти не будет использоваться в слу- чае, когда строка меньше максимальной длины. Мы объясним, как избежать этого недостатка, когда будем говорить об указателях.

Рис. 7.10. Массив строк

Синтаксис для доступа к одной из строк массива может выглядеть немного неожиданно:

star [ j ];

Если мы работаем с двумерным массивом, то где тогда второй индекс? Так как двумерный массив — это массив массивов, то мы можем получить доступ к элементам «внешнего» массива, каждый из которых в отдельности является массивом (в нашем случае строкой). Для того чтобы сделать это, нам не нужен второй индекс. Поэтому star[j] — это строка под номером j из массива строк.

 

24