Используя malloc и realloc создать двумерный динамический массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Используя malloc и realloc, помогите написать часть кода для ввода массива строк,количество строк и символов в строках неизвестно.

Решение задачи: «Используя malloc и realloc создать двумерный динамический массив»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include <string>
  5. #include <conio.h>
  6. using namespace std;
  7. int main(void)
  8. {
  9.     setlocale(LC_ALL, "");
  10.     int i = 1, s = 0, k = 1, j = 1, m = 1, n = 1, r, z = 0, size_x = 1, size_y = 1;
  11.     char** stroka;
  12.     char* razd;
  13.     bool q = 0;
  14.     cout << "Введите кол-во разделителей:";
  15.     cin >> r;
  16.     //Динамическое выделение памяти под одномерный массив
  17.     razd = (char*)malloc(3*sizeof(char));
  18.     for (z = 0; z < r; z++)
  19.     {
  20.         razd[z] = _getche();
  21.     }
  22.     //проверка на разделители
  23.     printf("\nВаши разделители:");
  24.     for (int z = 0; z<r; z++)
  25.     {
  26.         cout << "`" << razd[z] << "`";
  27.     }
  28.     //Динамическое выделение памяти под двумерный массив
  29.     cout << "\nВвод строк:\n";
  30.     stroka = (char**)malloc(size_y*sizeof(char*));
  31.  
  32.     for (i = 0; s != r; i++)
  33.     {
  34.         stroka[i] = (char*)malloc(size_x*sizeof(char));
  35.         for (j = 0; s != r; j++)
  36.         {
  37.             stroka[i][j] = _getche();
  38.             size_x++;
  39.  
  40.             if (stroka[i][j] == '\r')
  41.                 break;
  42.             stroka[i] = (char*)realloc(stroka[i], size_x*sizeof(char));
  43.         }
  44.         if (q == 1)
  45.             break;
  46.         for (z = 0, j = 0; z < r && j != '\r' && s != r;)
  47.         {
  48.             if (stroka[i][j] == razd[z])                    //в этом месте,даже если символы одинаковы
  49.             {                                                    //проверку не проходит и дальше else идет
  50.                 s++; z++; j = 0;
  51.             }
  52.             else j++;
  53.             s++;
  54.         }
  55.         size_y++;
  56.         cout << "\n";
  57.  
  58.         stroka = (char**)realloc(stroka, size_y*sizeof(char*));
  59.  
  60.  
  61.     }
  62.     cout << "\n";
  63.     //for (i = 0; i<m; i++)
  64.     //{
  65.     //  free(stroka[i]);
  66.     //}
  67.     //free(stroka);
  68.     system("pause");
  69. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы