|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.11.2022, 20:08 | #1 |
Новичок
Джуниор
Регистрация: 11.11.2022
Сообщений: 1
|
Пример ввода строк с клавиатуры и формирование массива этих строк
Добрый день! Я новичок и пытаюсь разобраться в теме динамических массивов. Нашел объяснение такого задания : пример ввода строк с клавиатуры и формирование массива этих строк. Всё в целом понятно, но не могу до конца понять для чего здесь создается два массива и с какой целью?Почему нельзя решить эту задачу используя один массив? Объясните, пожалуйста. Буду благодарен.
#include <iostream> using namespace std; void main() { // Массивы строк в C++. Строки типа string // Организация ввода строк с клавиатуры и формирование массива // 1. Объявление переменных string* AS; // массив вводимых строк, это результат string* AS2; // дополнительный массив строк int count; // количество элементов в массиве string s; // дополнительная переменная-строка char buf[80]; // буфер для ввода строк // 2. Цикл ввода строк, конец ввода - пустая строка "" cout << "Enter strings:\n"; count = 0; AS = nullptr; do { // 2.1. Ввести строку в массив типа char[] cout << "=> "; cin.getline(buf, 80, '\n'); // строки вводятся с пробелами // 2.2. Скопировать строку char[] в строку типа string s = buf; // 2.3. Если введена не пустая строка if (s != "") { // 2.3.1. Увеличить количество строк count++; // 2.3.2 Освободить память для нового массива AS2 = new string[count]; // 2.3.3. Скопировать данные из старого массива в новый for (int i = 0; i < count - 1; i++) AS2[i] = AS[i]; // 2.3.4. Добавить введенную строку в новый массив AS2[count - 1] = s; // 2.3.5. Освободить память, выделенную под старый (предыдущий) массив if (AS != nullptr) delete[] AS; // 2.3.6. Перенаправить указатель из предыдущего массива AS на массив AS2 AS = AS2; } } while (s != ""); // 3. Вывести созданный массив AS на экран cout << "\nArray AS is as follows:\n"; if (count > 0) for (int i = 0; i < count; i++) cout << "AS[" << i << "] = " << AS[i] << ::endl; else cout << "array AS is empty."; // 4. После использования массива AS освободить память, выделенную для него delete[] AS; } Результат выполнения программы Enter strings: => abc def => Hello world! => bestprog.net => This is a text. => Array AS is as follows: AS[0] = abc def AS[1] = Hello world! AS[2] = bestprog.net AS[3] = This is a text. |
11.11.2022, 20:39 | #2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Ну смотрите. Вы взяли коробку на 1 элемент и положили туда введенный апельсин. На следующей итерации вы ввели еще 1 апельсин, а коробка у вас вмещает только 1. Тогда вы берете коробку на 2 элемента и перекладываете в нее из первой апельсин и новый, а старую коробку возвращаете назад (delete[] AS). и.т.д. для следующих итераций. AS - это текущая коробка, а AS2 это временная переменная, которая сохраняет коробку по больше (на время перекладывания).
З.Ы. Если на цитрусовые аллергия, тогда тренируемся на кошках. Но они имеют свойство разбегаться. Последний раз редактировалось macomics; 11.11.2022 в 20:41. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Двумерный массив в C++ Формирование массива из min элементов строк матрицы,а функция 2 - Поиск max элемента массива. | kisel2014 | Общие вопросы C/C++ | 0 | 18.12.2019 00:36 |
Определить номера строк прямоугольного массива, хотя бы один элемент которых равен с, и элементы этих строк умножить на d | ksesh | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 03.06.2014 08:28 |
поиск строк и копирование ячеек с этих строк | Santla789 | Microsoft Office Excel | 2 | 19.11.2012 11:15 |
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце | Shpr0T | Microsoft Office Excel | 8 | 30.08.2010 17:52 |
Двумерные массивы. Формирование одномерного массива из сумм строк матрицы, кратных числу k (в С++) | Fimogen | Помощь студентам | 3 | 19.11.2007 07:30 |