Инициализация массивов неопределённой длины



Объявляя инициализируемый массив, можно заставить С++ автоматически определять его размер. Для этого достаточно не указывать размер массива в объявлении. В этом случае компилятор определит отсутствующий размер, пересчитав поставляемые инициализаторы, и создаст массив требуемой длины, который и называют массивом неопределённой длины, например:

Такие массивы весьма полезны. Так при необходимости создания таблицы интернет адресов очень удобно воспользоваться такой инициализацией

char e1[] = www.osborne.com;

char e2[] = www.weather.com;

char e3[] = www.amazon.com;

Такой метод инициализации не только избавляет от необходимости подсчёта количества символов, но и даёт возможность изменить интернет адрес, не думая о соответствующем изменении размера массива.

Инициализация массивов неопределённой длины не ограничивается одномерными массивами. Для многомерного массива можно указать все размеры, кроме самого левого, что даст возможность правильно индексировать массив. С помощью такого метода можно создавать таблицы переменной длины, и компилятор будет автоматически выделять под них требуемую память. В следующем примере 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]);

Чтобы получить доступ к индивидуальному символу в третьей строке можно использовать предложение вроде следующего:

cout << str_array[2][3];             //на экран выводится четвёртый символ третьей строки

Приводимая ниже программа демонстрирует работу с массивом строк на примере очень простого компьютеризированного справочника. Двумерный массив содержит пары имя - телефонный номер. Для определения телефонного номера необходимо ввести имя; на экран выводится соответствующий телефонный номер.

Задание 6-10

// 6_10 TELspr.cpp: главный файл проекта.

// Простой компьютеризированный справочник

       #include "stdafx.h"

       #include <iostream>

       #include <conio.h>

       #include <cstdio>

       using namespace std;

int main()

{

       setlocale (LC_ALL,"Russian");

       int i;

       char str[80];

       char numbers[10][80] ={

             "Tom", "555-3322",

             "Mery", "444-8976",

             "Djon", "333-1037",

             "Rachel", "222-1400",

             "Sherry", "111-8873"

       };

       cout << "Введите имя: ";

       cin >> str;

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

             if (!strcmp(str, numbers[i])){

                   cout << " Телефон " << numbers[i+1] << "\n";

                   break;

             }

             if (i==10) cout << " Не найдено имя ";

       _getch();

}

Обратите внимание как наращивается управляющая переменная цикла for: на каждом шаге к ней прибавляется 2. Так делается потому, что в массиве чередуются имена и телефонные номера.

Вопросы для самоконтроля

1. Покажите, как объявить массив hightemps типа shortint размером 31 элемент.

2. В С++ индексы любого массива начинаются с _____.

3. Напишите программу, которая просматривает массив из 10 целых чисел в поисках одинаковых значений. Все найденные пары программа должна выводить на экран.

4. Что такое строка, завершающая нулём?

5. Напишите программу, которая запрашивает у пользователя две строки, а затем сравнивает эти строки, не обращает внимание на регистр букв. В этом случае «ок» и «ОК» будут считаться равными.

6. Насколько велик должен быть массив-приёмник при использовании функции strcat()?

7. Как задаётся каждый индекс в многомерном массиве?

8. Покажите, как инициализировать массив nums типа int значениями 5, 66, 88.

9. В чём заключается принципиальное преимущество объявления массивов неопределённой длины?

10.  Напишите программу по представленному алгоритму, например:

 


Дата добавления: 2019-07-15; просмотров: 364; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!