Сортировка строк (ошибка сегментации) - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <string.h> #include <stdlib.h> void string_sort(char **a, int lim, int char_lim); int main(void) { int i, LIM, CHAR_LIM; scanf("%d%d", &LIM, &CHAR_LIM); char **massive_of_strings = (char **)malloc(LIM * sizeof(char*)); for(i = 0; i < LIM; ++i) { massive_of_strings[i] = (char*)malloc(CHAR_LIM * sizeof(char)); } for(i = 0; i < LIM; ++i) { printf("Введите %d-ую строку\n", i+1); fgets(massive_of_strings[i], CHAR_LIM, stdin); } for(i = 0; i < LIM; ++i) { printf("Вы ввели %d-ую строку - %s\n", i+1, massive_of_strings[i]); } string_sort(massive_of_strings, LIM, CHAR_LIM); printf("Строки после сортировки\n"); for(i = 0; i < LIM; ++i) { printf("%d-ая строка - %s\n", i+1, massive_of_strings[i]); } return 0; } void string_sort(char **a, int lim, int char_lim) { int i, j; char * temp = (char*)malloc(char_lim * sizeof(char)); for(i = 0; i < lim; ++i) { for(j = lim; j >= i; --j) { if(strcmp(a[j],a[j-1]) < 0) { strcpy(temp, a[j]); strcpy(a[j],a[j-1]); strcpy(a[j-1], temp); } } } }
Решение задачи: «Сортировка строк (ошибка сегментации)»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> void string_sort(char **a, int lim, int char_lim); int main(void) { int i, LIM, CHAR_LIM; scanf("%d%d", &LIM, &CHAR_LIM); getchar(); char **massive_of_strings = (char **)malloc(LIM * sizeof(char*)); for(i = 0; i < LIM; ++i) { massive_of_strings[i] = (char*)malloc(CHAR_LIM * sizeof(char)); } for(i = 0; i < LIM; ++i) { printf("Введите %d-ую строку\n", i+1); fgets(massive_of_strings[i], CHAR_LIM, stdin); } for(i = 0; i < LIM; ++i) { printf("Вы ввели %d-ую строку - %s\n", i+1, massive_of_strings[i]); } string_sort(massive_of_strings, LIM, CHAR_LIM); printf("Строки после сортировки\n"); for(i = 0; i < LIM; ++i) { printf("%d-ая строка - %s\n", i+1, massive_of_strings[i]); } return 0; } void string_sort(char **a, int lim, int char_lim) { int i, j; char * temp = (char*)malloc(char_lim * sizeof(char)); for(i = 0; i < lim; ++i) { for(j = lim-1; j > i; --j) { if(strcmp(a[j],a[j-1]) < 0) { strcpy(temp, a[j]); strcpy(a[j],a[j-1]); strcpy(a[j-1], temp); } } } }
Объяснение кода листинга программы
- Ввод количества строк и символов в строке
- Выделение памяти под массив указателей на строки
- Выделение памяти под каждую строку в цикле
- Ввод строк с клавиатуры и сохранение их в массиве
- Вывод введенных строк на экран
- Сортировка массива строк с помощью функции string_sort
- Вывод отсортированных строк на экран
- В функции string_sort:
- Внутренний цикл для прохода по массиву строк в обратном порядке
- Сравнение двух строк с помощью функции strcmp
- Если первая строка меньше второй, то они меняются местами с помощью временной переменной temp
- Внешний цикл для прохода по всем строкам, кроме последней
- Завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д