0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 1
1

Сформировать массив строк. Удалить из него К последних строк

22.09.2015, 21:17. Показов 1483. Ответов 1
Метки нет (Все метки)

Сформировать массив строк. Удалить из него К последних строк на языке СИ.


Реализовать функцию, организующую работу с динамически

выделяемым многомерным массивом/

● Массив (указатель на указатель или массив указателей) должен

выделяться с помощью функций malloc () / calloc () в

функции main ().

● Элементы массива могут вводиться в диалоговом режиме или

задаваться с помощью датчика случайных чисел.

● Сформированный массив должен передаваться в качестве

параметра в функцию.

● Для выполнения задания в функции допустимо динамически

создавать новые массивы.

● Для работы со строками и областями памяти можно

использовать функционал стандартной библиотеки языка Си.

● После достижения поставленных в задании целей необходимо

удалять динамически выделенные массивы с помощью

функции free ().

● В результате задания в функции main () должен быть

выведен на экран результирующий массив, полученный в ходе

выполнения реализованной функции.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2015, 21:17
Ответы с готовыми решениями:

Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк
Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из...

Сформировать массив строк. Удалить из него строку,
Начинающуюся на букву "a"

Сформировать массив строк, удалить из него одинаковые строки
собственно сабж. буду очень благодарен тому кто поможет,а то я на грани отчисления,а уроки по c++...

Сформировать массив строк. Удалить из него самую короткую строку
Сформировать массив строк. Удалить из него самую короткую строку

1
837 / 640 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
24.09.2015, 09:07 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX_DBLOCK    8
 
typedef struct {
    char** arr;
    size_t len;
    size_t cnt;
} string_t;
 
static int ___string_alloc(string_t* s, size_t n);
static int ___string_insert(string_t* s, size_t index, const char* str, size_t len);
#define string_size(s)   (s).cnt
#define string_get(s, i) (s).arr[(i)]
 
void string_init(string_t* s);
int  string_add(string_t* s, const char* str);
int  string_addn(string_t* s, const char* str, size_t n);
int  string_insert(string_t* s, size_t index, const char* str);
int  string_set(string_t* s, size_t index, const char* str);
int  string_erase(string_t* s, size_t index, size_t cnt);
void string_clear(string_t* s);
int  string_explode(string_t* s, const char* str, const char* delim);
 
 
int main(void){
    size_t i;
    string_t s;
    char str[] = "заяц||белка||бобр||скунс||собака||"\
                 "слон||тигр||лиса||соболь||шимпанзе||"\
                 "росомаха||лев||пантера||пума||кугуар";
 
    string_init(&s);
    string_explode(&s, str, "||");
 
    for(i = 0; i < string_size(s); ++i)
        puts(string_get(s, i));
    putchar('\n');
 
    string_insert(&s, 0, "\tпосле удаления");
    string_erase(&s, 3, 5);
    string_add(&s, "\tконец");
 
    for(i = 0; i < string_size(s); ++i)
        puts(string_get(s, i));
 
    string_clear(&s);
    return 0;
}
 
//инициализация
void string_init(string_t* s){
    s->arr = NULL;
    s->cnt = 0;
    s->len = MAX_DBLOCK;
}
 
//вставка строки в конец массива
int string_add(string_t* s, const char* str){
    return ___string_insert(s, s->cnt, str, strlen(str));
}
 
//вставка строки в конец массива
int string_addn(string_t* s, const char* str, size_t n){
    return ___string_insert(s, s->cnt, str, n);
}
 
//произвольная вставка строки по-индексу
int string_insert(string_t* s, size_t index, const char* str){
    return ___string_insert(s, index, str, strlen(str));
}
 
//присвоить новую строку по-индексу
int string_set(string_t* s, size_t index, const char* str){
    char*  p;
    size_t n1, n2;
    if(index < s->cnt){
        n1 = strlen(s->arr[index]);
        n2 = strlen(str);
        if(n1 >= n2)
            strcpy(s->arr[index], str);
        else {
            p = (char*)realloc(s->arr[index], (n2 + 1) * sizeof(char));
            if(p == NULL)
                return 0;
            strcpy(p, str);
            s->arr[index] = p;
        }
        return 1;
    }
    return 0;
}
 
//удаление элементов массива-строк
int string_erase(string_t* s, size_t index, size_t cnt){
    size_t i, j;
    if((index + cnt) > s->cnt)
        return 0;
    for(i = index; i < (index + cnt); ++i)
        free(s->arr[i]);
 
    s->cnt -= cnt;
    for(i = index, j = index + cnt; i < s->cnt; ++i)
        s->arr[i] = s->arr[j++];
    return 1;
}
 
//удаление всего массива
void string_clear(string_t* s){ 
    size_t i;
    for(i = 0; i < s->cnt; ++i)
        free(s->arr[i]);
 
    if(s->arr != NULL)
        free(s->arr);
    string_init(s);
}
 
//разделение строки по указанному разделителю
int string_explode(string_t* s, const char* str, const char* delim){
    const char* p;
    size_t n2, n1 = strlen(delim);
 
    s->cnt = 0;
    p      = str;
    while((p = strstr(p, delim)) != NULL){
        if((n2 = (size_t)(p - str)) > 0){
            if(! string_addn(s, str, n2))
                return 0;
        }
        p  += n1;
        str = p;
    }
    return (*str) ? string_add(s, str) : 1;
}
 
//произвольная вставка строки по-индексу
static int ___string_insert(string_t* s, size_t index, const char* str, size_t len){
    char*  p;
    size_t i;
    if(index > s->cnt)
        return 0;
    if((p = (char*)malloc((len + 1) * sizeof(char))) == NULL)
        return 0;
    strncpy(p, str, len);
    p[len] = '\0';
 
    if(! ___string_alloc(s, 1)){
        free(p);
        return 0;
    }
    for(i = s->cnt; i > index; --i)
        s->arr[i] = s->arr[i - 1];
 
    s->arr[index] = p;
    ++(s->cnt);
    return 1;
}
 
//аллокация для массива указателей
static int ___string_alloc(string_t* s, size_t n){
    char** p;
    size_t i;
    if(s->arr == NULL){
        i = s->len;
        if(n > i)
            i = n;
        s->arr = (char**)malloc(i * sizeof(char*));
        if(s->arr == NULL)
            return 0;
        s->len = i;
    } else if((s->cnt + n) >= s->len){
        i = s->cnt + n + s->len / 2;
        p = (char**)realloc(s->arr, i * sizeof(char*));
        if(p == NULL)
            return 0;
        s->arr = p;
        s->len = i;
    }
    return 1;
}
Пример работы кода
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2015, 09:07
Помогаю со студенческими работами здесь

Сформировать массив строк. Удалить из него самую короткую строку
Помогите пожалуйста. Сформировать массив строк. Удалить из него самую короткую строку

Сформировать массив строк. Удалить из него самую длинную строку
задание 1. Сформировать массив строк. Удалить из него самую длинную строку. задание 2. Матрицу...

Сформировать массив строк. Удалить из него строку начинающуюся на букву «а»
Сформировать массив строк. Удалить из него строку начинающуюся на букву «а». Пожалуйста помогите...

Сформировать динамический массив строк; удалить из него строку с заданным номером
Сформировать динамический массив строк. Удалить из него строку с заданным номером. Добавлено...

Указатели. Сформировать массив строк. Удалить из него самую длинную строку
Сформировать массив строк. Удалить из него самую длинную строку Добавлено через 16 часов 19...

Сформировать массив строк. Удалить из него строку начинающуюся и заканчивающуюся на одну и ту же букву
Сформировать массив строк. Удалить из него строку начинающуюся и заканчивающуюся на одну и ту же...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru