Используя 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");
}

Объяснение кода листинга программы

  1. Объявлены переменные: i, s, k, j, m, n, r, z, size_x, size_y, stroka, razd, q.
  2. Пользователю предлагается ввести количество разделителей.
  3. Выделена память под одномерный массив razd.
  4. Введенные символы сохраняются в массиве razd.
  5. Выводится сообщение и символы, введенные пользователем в качестве разделителей.
  6. Выделена память под двумерный массив stroka.
  7. Введенные строки сохраняются в массиве stroka.
  8. Проверка на разделители.
  9. Реализованы операции вставки и удаления элементов массива.
  10. Выделенная память освобождается.
  11. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы