Сортировка строк файла в алфавитном порядке - 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 для успешного выполнения программы