Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2022, 20:08   #1
ParnayaBylochka
Новичок
Джуниор
 
Регистрация: 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.
ParnayaBylochka вне форума Ответить с цитированием
Старый 11.11.2022, 20:39   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Ну смотрите. Вы взяли коробку на 1 элемент и положили туда введенный апельсин. На следующей итерации вы ввели еще 1 апельсин, а коробка у вас вмещает только 1. Тогда вы берете коробку на 2 элемента и перекладываете в нее из первой апельсин и новый, а старую коробку возвращаете назад (delete[] AS). и.т.д. для следующих итераций. AS - это текущая коробка, а AS2 это временная переменная, которая сохраняет коробку по больше (на время перекладывания).

З.Ы. Если на цитрусовые аллергия, тогда тренируемся на кошках. Но они имеют свойство разбегаться.

Последний раз редактировалось macomics; 11.11.2022 в 20:41.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив в 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