Выполнить сортировку массива строк - C (СИ)

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

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

Доброго времени суток Поставили предо мной такую задачу "В ходе выполнения лабораторной работы потребуется выполнить сортировку массива строк. Для ускорения этой операции обычно используется дополнительный массив указателей. В этом случае вместо перестановки двух строк с помощью функции strcpy() используется перестановка указателей обычным присваиванием." в связи с этим встал вопрос о создании динамического массива строк с (на чистом си) с помощью функций malloc() и free()/ Как это сделать? Число строк заранее не известно может быть 1 2 3 или 20 длинна этих строг так же под вопросом одна строка может быть длиной 1 символ и следующая 100 в общем как захочется проверяющему Я так понимаю нужен двумерный символьный динамический массив но затрудняюсь как сделать чтобы строки и количество элементов в них расширялось в процессе работы программы
очень нужна помощь так как сам додуматься не могу((
Листинг программы
  1. int main ()
  2. {
  3. int i,j;
  4. char **p [i][j];
  5. p = (char (**)[10]) malloc(100*sizeof(int));
  6. getch();
  7. return 0;
  8. }
пишу это но не компилируется ругается на указатель

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

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <locale.h>
  5.  
  6. int main(void)
  7. {
  8.     setlocale (LC_ALL, "RUS");
  9.     int strok=3; //Количество строк в массиве
  10.     int len=255; //Длина строки
  11.  
  12.     char **Massiv = (char**)malloc(strok * sizeof(char*));
  13.     for (int i=0;i<strok;i++)
  14.         Massiv[i] = (char*)malloc(len * sizeof(char*)); //Выделяем память под количество символов в строке для каждой строки в отдельности
  15.  
  16.            printf("Вводимое количество строк = %d \n",strok);
  17.        for (int i=0;i<strok;i++) scanf("%s",Massiv[i]); //Считываем строки с клавиатуры в массив
  18.  
  19.       printf("\n\\ПОЛУЧЕННЫЙ МАССИВ\n");
  20.        for (int i=0;i<strok;i++)
  21.            printf("%s \n",Massiv[i]); //Выводим массив на экран
  22.  
  23.     for (int i=0;i<strok;i++) free(Massiv[i]); //Освобождаем память
  24.     free(Massiv);
  25.  
  26.     system("PAUSE");
  27. }

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

  1. Подключение необходимых библиотек для работы с памятью и вводом/выводом данных.
  2. Установка локали на русский язык.
  3. Объявление переменных:
    • strok - количество строк в массиве;
    • len - длина строки.
  4. Выделение памяти под массив указателей на строки.
  5. В цикле выделяем память под каждую строку в массиве строк.
  6. Считываем строки с клавиатуры и сохраняем их в массиве.
  7. Выводим полученный массив на экран.
  8. Освобождаем память, выделенную под каждую строку в массиве строк.
  9. Освобождаем память, выделенную под массив указателей на строки.
  10. Ожидание нажатия клавиши для завершения работы программы.

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


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

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

11   голосов , оценка 3.909 из 5

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

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

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