Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример на многомерные динамические массивы

/*

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

  • 1) добавление строки в конец массива;
  • 2) вставка строки в массив по заданному индексу;
  • 3) удаление строки из массива по заданному индексу;
  • 4) очистка массива (удаление всех строк);
  • 5) вывод на экран содержимого массива.

*/

#include <iostream.h>#include <string.h> // Набор констант, представляющих различные пункты менюenum {ChoiceAddEnd=1, ChoiceInsert, ChoiceDelete, ChoiceDeleteAll, ChoicePrint, ChoiceQuit}; int Menu(); // Вывод менюchar** AddLine(char**, int&); // Добавление строки в конец массиваchar** InsLine(char**, int&); // Вставка строки в массивchar** DelLine(char**, int&); // Удаление указанной строки из массиваvoid DelAllLines(char**, int&); // Удаление всех строк массиваvoid Print(char**, int); // Распечатка строк массиваbool IsArrayEmpty(int&); // Проверка на наличие строк в массиве void main(){ char **c; // Массив строк int m = 0; // Начальное количество строк массива int choice = ChoiceAddEnd; while (choice!= ChoiceQuit) // Пока не выбран пункт ВЫХОД { choice = Menu(); // Вывод меню cin.ignore(1); // Очистка потока ввода switch (choice) // Выбор пункта меню { case ChoiceAddEnd: c = AddLine(c, m); // Добавление строки в конец массива break; case ChoiceInsert: c = InsLine(c, m); // Вставка строки в массив break; case ChoiceDelete: if (!IsArrayEmpty(m)) // Если массив не пуст c = DelLine(c, m); // Удаление строки break; case ChoiceDeleteAll: if (!IsArrayEmpty(m)) // Если массив не пуст DelAllLines(c, m); // Удаление всех строк массива break; case ChoicePrint: if (!IsArrayEmpty(m)) // Если массив не пуст Print(c, m); // Распечатка массива break; case ChoiceQuit: break; default: // В остальных случаях cout << "Error in choice! "; break; } }} char** AddLine(char **c, int &m)// Добавление строки в конец массива{ char str[256]; // Массив для ввода новой строки int n; // Длина введенной строки int i; cout << "Input string: "; cin.getline(str, 256); // Ввод строки n = strlen(str); // Вычисление длины новой строки if (m == 0) // Если массив строк пуст { m++; c = new char*[m]; c[0] = new char[n + 1]; // Создаем новую строку в массиве строк strcpy(c[0], str); return c; } else { m++; char** t = new char*[m];// Новый массив строк for(i = 0; i < m - 1; i++) { t[i] = c[i]; } t[m - 1] = new char[n + 1]; strcpy(t[m - 1], str); // Копирование новой строки delete [] c; return t; // Возврат нового адреса массива строк } }} char** InsLine(char **c, int &m)// Вставка строки в массив{ char str[256]; // Массив для ввода новой строки int n; // Длина введенной строки int k; // Позиция новой строки в массиве int i, j = 0; cout << "Input string: "; cin.getline(str, 256); cout << "Input position # (0-" << m << "): "; cin >> k; while(k < 0 || k > m) // Проверка на ошибочный ввод { cout << "Error!!! Input position # (0-" << m << "): "; cin >> k; } n = strlen(str); // Длина новой строки if (m == 0) // Если массив строк пуст { m++; c = new char*[m]; c[0] = new char[n + 1]; // Создаем новую строку в массиве строк strcpy(c[0], str); return c; // Возврат нового адреса массива строк } else { m++; char** t = new char*[m];// Новый массив строк for(i = 0; i < m; i++) { if (i == k) { t[i] = new char[n + 1]; strcpy(t[i], str); j = 1; } else { t[i] = c[i - j]; } } delete [] c; // Удаление массива строк return t; // Возврат нового адреса массива строк }} char** DelLine(char **c, int &m)// Удаление указанной строки из массива{ int k; // Индекс удаляемой строки int i, j = 0; cout << "Input position # (0-" << m - 1 << "): "; cin >> k; while(k < 0 || k >= m) // Проверка на ошибочный ввод { cout << "Error!!! Input deleting position #: "; cin >> k; } m--; char** t = new char*[m];// Создание нового массива строк for(i = 0; i < m; i++) { if (i == k) j = 1; t[i] = c[i + j]; } delete [] c; // Удаление массива строк return t; // Возврат нового адреса массива строк} void DelAllLines(char **c, int &m)// Удаление всех строк массива{ for(int i = 0; i < m; i++) delete [] c[i]; delete [] c; // Удаление всех строк массива m = 0;} bool IsArrayEmpty(int &m)// Возвращает истину, если массив строк пуст; в обратном случае - ложь{ if (m == 0) { cout << "Your line array is empty. "; return true; } else return false;} int Menu()// Вывод меню{ int choice; cout << " ******* Menu ******* "; cout << "1-Add 2-Insert 3-Delete 4-Delete All 5-Print 6-Quit "; cin >> choice; // Выбор пункта меню if(choice < 0 || choice > 6) // Проверка выбора choice = 0; return choice; // Возвращение выбранного пункта} void Print(char **c, int m)// Распечатка массива строк{ for(int i = 0; i < m; i++) cout << i << ": " << c[i] << endl;}

/*

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

*/

<== предыдущая лекция | следующая лекция ==>
Многомерные динамические массивы | Пример №1
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 310; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.