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