Используя 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.
- Проверка на разделители.
- Реализованы операции вставки и удаления элементов массива.
- Выделенная память освобождается.
- Программа завершается.