Не работает программа сортировки строк с помощью двумерного массива указателей - 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;
- }
Объяснение кода листинга программы
В данном коде реализуется алгоритм сортировки пузырьком для массива строк, используя двумерный массив указателей. Ниже представлена последовательность действий:
- Переменная
tmp
инициализируется значениемa[i]
(пустая строка). - В каждой итерации цикла
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
.
- Пока
- Значение
- Значение
tmp
не используется в цикле, поэтому предполагается, что оно не влияет на работу алгоритма. - Код не содержит обработки ошибок или проверки на выход за границы массива, что может привести к неопределенному поведению программы.
- Код не содержит вывода на экран, поэтому результаты сортировки не отображаются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д