Используя malloc и realloc создать двумерный динамический массив - C (СИ)
Формулировка задачи:
Используя malloc и realloc, помогите написать часть кода для ввода массива строк,количество строк и символов в строках неизвестно.
Решение задачи: «Используя malloc и realloc создать двумерный динамический массив»
textual
Листинг программы
- #include <stdio.h>
- #include <iostream>
- #include <stdlib.h>
- #include <string>
- #include <conio.h>
- using namespace std;
- int main(void)
- {
- setlocale(LC_ALL, "");
- int i = 1, s = 0, k = 1, j = 1, m = 1, n = 1, r, z = 0, size_x = 1, size_y = 1;
- char** stroka;
- char* razd;
- bool q = 0;
- cout << "Введите кол-во разделителей:";
- cin >> r;
- //Динамическое выделение памяти под одномерный массив
- razd = (char*)malloc(3*sizeof(char));
- for (z = 0; z < r; z++)
- {
- razd[z] = _getche();
- }
- //проверка на разделители
- printf("\nВаши разделители:");
- for (int z = 0; z<r; z++)
- {
- cout << "`" << razd[z] << "`";
- }
- //Динамическое выделение памяти под двумерный массив
- cout << "\nВвод строк:\n";
- stroka = (char**)malloc(size_y*sizeof(char*));
- for (i = 0; s != r; i++)
- {
- stroka[i] = (char*)malloc(size_x*sizeof(char));
- for (j = 0; s != r; j++)
- {
- stroka[i][j] = _getche();
- size_x++;
- if (stroka[i][j] == '\r')
- break;
- stroka[i] = (char*)realloc(stroka[i], size_x*sizeof(char));
- }
- if (q == 1)
- break;
- for (z = 0, j = 0; z < r && j != '\r' && s != r;)
- {
- if (stroka[i][j] == razd[z]) //в этом месте,даже если символы одинаковы
- { //проверку не проходит и дальше else идет
- s++; z++; j = 0;
- }
- else j++;
- s++;
- }
- size_y++;
- cout << "\n";
- stroka = (char**)realloc(stroka, size_y*sizeof(char*));
- }
- cout << "\n";
- //for (i = 0; i<m; i++)
- //{
- // free(stroka[i]);
- //}
- //free(stroka);
- system("pause");
- }
Объяснение кода листинга программы
- Объявлены переменные: i, s, k, j, m, n, r, z, size_x, size_y, stroka, razd, q.
- Пользователю предлагается ввести количество разделителей.
- Выделена память под одномерный массив razd.
- Введенные символы сохраняются в массиве razd.
- Выводится сообщение и символы, введенные пользователем в качестве разделителей.
- Выделена память под двумерный массив stroka.
- Введенные строки сохраняются в массиве stroka.
- Проверка на разделители.
- Реализованы операции вставки и удаления элементов массива.
- Выделенная память освобождается.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д