Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Serge1697
0 / 0 / 0
Регистрация: 22.09.2015
Сообщений: 1
1

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

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

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


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

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

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

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

функции main ().

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

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

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

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

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

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

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

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

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

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

функции free ().

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

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

выполнения реализованной функции.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2015, 21:17
Ответы с готовыми решениями:

Дан двумерный массив. Удалить из него первую из строк, сумма элементов которых не превышает некоторое заданное число
Помогите с решением: Дан двумерный массив. Удалить из него первую из строк,...

Сформировать двумерный массив, удалить из него все столбцы в которых встречается заданное число
Здравствуйте! Помогите пожалуйста с задачкой, уже который день бью голову над...

Сформировать массив А1 из максимальных элементов строк матрицы А
12. Даны два массива: А3х3 и В3. Сформировать массив А1 из максимальных...

Чтение из файла пяти последних строк
Добрый вечер! Есть один модуль , который отвечает за ввод последних 5...

Сформировать массив Y, поместив в него в порядке возрастания все различные числа, входящие в массив X
Ребята тут проблема, не знаю как дальше решить. 30. Дан массив целых чисел...

1
Геомеханик
787 / 594 / 937
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2015, 09:07

Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию
Создать текстовый файл F1 не менее, чем из 10 строк и записать в него...

Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию
Всем привет, задание такое: Создать текстовый файл F1 не менее, чем из 10 строк...

Сформировать новый массив B так, чтобы в него вошли те элементы массива A
В массиве A лежат целые числа. Сформировать новый массив B таким образом, чтобы...


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

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

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