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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Золушка_я
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 79
#1

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

29.09.2016, 13:15. Просмотров 254. Ответов 5
Метки нет (Все метки)

Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе написания, но уже наверное есть ошибки. Наработки чуть ниже. Хочу понять правильно ли мыслю. Если можете объясните, пожалуйста. Спасибо заранее за помощь.

Есть указатель на указатель 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) - функция, которая будет освобождает память в конце программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#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;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 13:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей (C++):

Добавление элемента в конец динамического массива! - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;malloc.h&gt; using namespace std; int main() { int i, key, n, amountRem,...

Добавление в программу указателей - C++
Необходимо в этом коде использовать указатели. Начал изучать указатели, не знаю где применить. #include &lt;clx.h&gt; #pragma hdrstop ...

Сделать добавление элемента в массив и удаление элемента из массива используя STL - C++
Всем привет. Помогите пожалуйста написать. Нужно использовать STL. Необходимо сделать добавление элемента в массив и удаление элемента из...

Добавление и удаление элемента динамического массива - C++
Подскажите какие существую способы добавления и удалеия элемента одномерного динамического массива(переопределяя размер массива)....

Удаление массива указателей - C++
есть класс: class test { private: static test **list; static int count_object; public: void mesto::Add() {

Добавление элемента в список после указанного - C++
Добавление нового элемента в список после указанного элемента по значению информационного поля и разбивка списка на два по указанному...

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

Не по теме:

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

0
Золушка_я
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 79
30.09.2016, 23:43  [ТС] #5
задание сделано. можно удалять тему.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
30.09.2016, 23:51 #6
Цитата Сообщение от Золушка_я Посмотреть сообщение
задание сделано. можно удалять тему.
Зачем удалять то? Пусть на золушку посмотрят!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 23:51
Привет! Вот еще темы с ответами:

Добавление в список нового элемента - C++
Всем доброе время суток. Мне нужна помощь, есть задание: нужно добавить в список новый элемент, после элемента, совпадающего с ключем x,...

Добавление нового элемента в список - C++
Добавить новый элемент в список после максимального ключа. У меня возникла проблема. Я не могу сдвинуть элемент. Например задаю 23 29...

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

Добавление элемента в конец списка - C++
Сначала добавляет первый элемент, а далее не хочет? Посмотрите свежим глазом, а то я лагаю! void List::bound(char data) {if (!Head) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
30.09.2016, 23:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru