Форум программистов, компьютерный форум CyberForum.ru

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей - C++

Восстановить пароль Регистрация
 
Золушка_я
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 79
29.09.2016, 13:15     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей #1
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе написания, но уже наверное есть ошибки. Наработки чуть ниже. Хочу понять правильно ли мыслю. Если можете объясните, пожалуйста. Спасибо заранее за помощь.

Есть указатель на указатель char **pp (он будет содержать адрес массива указателей на строки) и размер этого массива int size, который изначально равен 0. Надо написать функции и добавить в одну программу их вызов:
- char **AddPtr (char **pp, int size, char *str) - функция, которая будет добавлять в конец массива указателей новый указатель на новую строку (*str), которую введет пользователь.
- char **DelPtr (char **pp, int size, int ncell) – функция, которая будет удалять указанный пользователем элемент (ncell) из массива указателей и освобождать память занимаемую строкой и указателем на неё.
- char **InsPtr (char **pp, int size, int ncell, char *str) - функция, которая будет добавлять в указанный элемент массива указателей (ncell) новый указатель на новую строку (*str), которую введет пользователь. Номер строки- вставки (ncell) указывает пользователь. В результате этого массив указателей «раздвинется» на один элемент.
- void ShowPtr (char **pp, int size) - функция, которая будет выводить на экран массив с текущим количеством строк.
- void FreePtr (char **pp, int size) - функция, которая будет освобождает память в конце программы.

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<ctime>

using namespace std;

char **AddStr(char **, int, char *);
char **InsStr(char **, int, char *, int n);
char **AddPtr(char **, int, char *);
char **DelPtr(char **, int, int ncell);
char **InsPtr(char **, int, char *);
void Free(char **pp, int size);
void ShowPtr(char **pp, int size);
void FreePtr(char **pp, int size);

void main()
{
setlocale(0, "");
srand(time(NULL));
int size = 0;
char **pp=0;
pp = AddStr(pp, size, "text1");
size++;
pp = AddStr(pp, size, "text2");
size++;
pp = AddStr(pp, size, "text3");
size++;
int n = 2;
pp=InsStr(pp, size, "text5", n);
size++;

for (int i = 0; i < size; i++)
cout << pp[i] << endl;
Free(pp, size);
}


char **AddStr(char **pp, int size, char *str)
{
if (size == 0)
{
pp = new char *[size + 1]; // выделяем память для нашего указателя
}
else
{
char ** temp = new char *[size + 1];

for (int i = 0; i < size; i++) //перекладываем все строки
{
temp[i] = pp[i];
}
delete[]pp;
pp = temp;//перекладываем адрес, положить в новую строку, которую мы передаем
}
pp[size] = new char[strlen(str) + 1];//выделяем место, размером как наша строка
strcpy(pp[size], str);
return pp;
}

char **InsStr(char **pp, int size, char *str, int n)
{
char ** temp = new char *[size + 1];

for (int i = 0; i < n; i++) //перекладываем все строки
{
temp[i] = pp[i];
}

temp[n] = new char[strlen(str) + 1];//выделяем место, размером как наша строка
strcpy(temp[n], str);
for (int i = n; i < size; i++) //перекладываем все строки
{
temp[i + 1] = pp[i];
}

delete[]pp;
pp = temp;
return pp;
}

char **AddPtr(char **pp, int size, char *str);
{
if (size == 0)
{
pp = new char *[size + 1]; // выделяем память для нашего указателя
}
else
{
char ** temp = new char *[size + 1];

for (int i = 0; i < size; i++) //перекладываем все строки
{
temp[i] = pp[i];
}
delete[]pp;
pp = temp;//перекладываем адрес, положить в новую строку, которую мы передаем
}
pp[size] = new char[strlen(str) + 1];//выделяем место, размером как наша строка
strcpy(pp[size], str);
return pp;
}

char **DelPtr(char **pp, int size, int ncell);

char **InsPtr(char **pp, int size, int ncell, char *str);


void ShowPtr(char **pp, int size);

void FreePtr(char **pp, int size);

void Free (char **pp, int size)
{
for (int i = 0; i<size; i++)
delete[]pp[i];
delete[]pp;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 13:15     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Посмотрите здесь:

Добавление в список нового элемента C++
C++ Добавление и удаление элемента динамического массива
Удаление массива указателей C++
Добавление элемента в конец списка C++
Добавление в программу указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VAN0
48 / 48 / 27
Регистрация: 05.05.2013
Сообщений: 132
Завершенные тесты: 1
29.09.2016, 14:30     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей #2
Если ООП не знаете, то наработки верные, ошибок не нашел.
Три функции, которые делают одно и тоже, это, как я понимаю, пока недоработка.
Мой совет не затягивайте с ООП, потом отучить себя от процедурного программирования будет сложнее, а данный код смотрится по динозавровски, так надо писать на С, ане на С++.
Золушка_я
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 79
29.09.2016, 14:41  [ТС]     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей #3
VAN0, Все правильно. Это язык С с элементами С++. Просто в С толком не нахожу ответов, поэтому ориентируюсь на С++.
nmcf
29.09.2016, 14:44
  #4

Не по теме:

Золушка_я, graphics.h ожидать?

Золушка_я
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 79
30.09.2016, 23:43  [ТС]     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей #5
задание сделано. можно удалять тему.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
30.09.2016, 23:51     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей #6
Цитата Сообщение от Золушка_я Посмотреть сообщение
задание сделано. можно удалять тему.
Зачем удалять то? Пусть на золушку посмотрят!
Yandex
Объявления
30.09.2016, 23:51     Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Ответ Создать тему
Опции темы

Текущее время: 21:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru