Сортировка строк файла в алфавитном порядке - C (СИ)
Формулировка задачи:
Совсем не разбираюсь в файлах(( Напишите пожалйуста, как можно провести сортировку строк файла в алфавитном порядке в Си???
Решение задачи: «Сортировка строк файла в алфавитном порядке»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLINE 4096 #define IFNAME "in.txt" #define OFNAME "out.txt" int scmp(const void *p1, const void *p2) { const char *s1, *s2; s1 = * (char **) p1; s2 = * (char **) p2; return strcmp(s1, s2); } int main(void) { FILE *ifp, *ofp; char *lineptr[MAXLINE]; char s[MAXLINE]; int i, nl; ifp = fopen(IFNAME, "r"); if(ifp == NULL || (ofp = fopen(OFNAME, "w")) == NULL) { perror("fopen"); return -1; } for(i = 0; i < MAXLINE; ) { if(fgets(s, sizeof(s), ifp) == NULL) break; if(*s != '\n') lineptr[i++] = strdup(s); } nl = i; qsort(lineptr, nl, sizeof(char *), scmp); for(i = 0; i < nl; i++) { fprintf(ofp, "%s", lineptr[i]); free(lineptr[i]); } fclose(ifp); fclose(ofp); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, string.h
- Определяются константы: MAXLINE - максимальное количество символов в строке, IFNAME - имя файла для чтения, OFNAME - имя файла для записи
- Создается функция scmp для сортировки строк
- В функции main открывается файл для чтения и записи, создается массив для хранения строк и их количества
- В цикле считываются строки из файла, если текущая строка не пустая, она добавляется в массив
- Массив строк сортируется с помощью функции qsort и сравнивается на основе функции scmp
- Строки записываются в отсортированном порядке в файл для записи
- Файлы закрываются, возвращается 0 для успешного выполнения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д