Не работает программа сортировки строк с помощью двумерного массива указателей - C (СИ)

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

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

Не работает программа сортировки строк с помощью двумерного массива указателей. Не подскажете где ошибка?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define strlength 1000
 
int main()
 
{
    char **a; int i, j; int N;
        char s[strlength];
 
        scanf("%d", &N);
 
        a = (char **)malloc((N + 1) * sizeof(char *));
 
        for (i = 1; i <= N + 1; i++)
        {
                fgets(s, strlength, stdin);
 
                a[i] = (char *)malloc((strlen(s) + 1) * sizeof(char));
 
                strcpy(a[i], s);
        }
 
        for (i = 1; i <= N + 1; ++i)
        {
            strcpy(s, a[i]);
            j = i - 1;
 
            while ((j >= 0) && (strcmp(a[j], s) > 0))
                {
                    strcpy(a[j + 1], a[j]);
                    j = j - 1;
                }
            strcpy(a[j + 1], s);
        }
 
        for (i = 1; i <= N + 1; i++)
            fputs(a[i], stdout);
 
        for(i = 1; i < N; i++)
        {
                free(a[i]);
        }
 
        free(a);
 
        return 0;
}
Немного исправил, теперь выдает на некоторых наборах debug ошибку.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define strlength 1000
 
int main()
 
{
    char **a; int i, j; int N;
        char s[strlength];
 
        scanf("%d", &N);
 
        a = (char **)malloc((N + 1) * sizeof(char *));
 
        for (i = 0; i < N + 1 ; i++)
        {
                fgets(s, strlength, stdin);
 
                a[i] = (char *)malloc((strlen(s) + 1) * sizeof(char));
 
                strcpy(a[i], s);
        }
 
        for (i = 1; i < N + 1; ++i)
        {
            strcpy(s, a[i]);
            j = i - 1;
 
            while ((j >= 0) && (strcmp(a[j], s) > 0))
                {
                    strcpy(a[j + 1], a[j]);
                    j = j - 1;
                }
            strcpy(a[j + 1], s);
        }
 
        for (i = 0; i < N +1; i++)
            fputs(a[i], stdout);
 
        for(i = 0; i < N; i++)
        {
                free(a[i]);
        }
 
        free(a);
 
        return 0;
}

Решение задачи: «Не работает программа сортировки строк с помощью двумерного массива указателей»

textual
Листинг программы
.........................
char* tmp;
..................
for (i = 1; i < N + 1; ++i)
        {
            tmp=a[i];
            j = i - 1;
 
            while ((j >= 0) && (strcmp(a[j], tmp) > 0))
                {
                    a[j + 1]=a[j]);
                    j = j - 1;
                }
            a[j + 1]=tmp;
        }

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

В данном коде реализуется алгоритм сортировки пузырьком для массива строк, используя двумерный массив указателей. Ниже представлена последовательность действий:

  1. Переменная tmp инициализируется значением a[i] (пустая строка).
  2. В каждой итерации цикла for начиная с i=1 до N+1 (включительно) выполняется следующее:
    • Значение tmp присваивается a[i].
    • Переменная j инициализируется значением i-1 (т.е. i уменьшается на единицу).
    • В цикле while происходит сравнение и перестановка элементов массива:
      • Пока j больше или равно нулю и значение a[j] больше значения tmp, выполняется следующее:
        • Значение a[j+1] присваивается значению a[j].
        • Значение j уменьшается на единицу.
      • После выхода из цикла while, значение a[j+1] присваивается значению tmp.
  3. Значение tmp не используется в цикле, поэтому предполагается, что оно не влияет на работу алгоритма.
  4. Код не содержит обработки ошибок или проверки на выход за границы массива, что может привести к неопределенному поведению программы.
  5. Код не содержит вывода на экран, поэтому результаты сортировки не отображаются.

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


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

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

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