Сортировка строк файла по алфавиту - C (СИ)
Формулировка задачи:
Здравствуйте. Необходимо отсортировать считать строки из файла, отсортировать их по алфавиту с помощью шейкер-сортировки, и вывести на экран. Вот что я смог написать, проблема именно в том, что я не могу понять как сортировать строки.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char s[10][20];
char *p[10];
FILE *f;
int i=1;
int k=1;
int m,N;
char *buf;
f = fopen ("input.txt", "r");
while (!feof(f))
{
fscanf (f, "%s", s);
i++;
*p[i]=s[i][0];
}
fclose (f);
do {
N = 0;
for(m=10; m > 0; --m) {
if(strcmp(p[m-1],p[m])>0) {
buf = p[m];
p[m-1] = p[m];
p[m] = buf;
N = 1;
}
}
for(m=1; m < 10; ++m) {
if (strcmp(p[m-1],p[m])>0) {
buf = p[m-1];
p[m-1] = p[m];
p[m] = buf;
N = 1;
}
}
} while(N);
for (k=0; k<i; k++)
{
printf ("\t\t %s \n", p[k]);
}
}Решение задачи: «Сортировка строк файла по алфавиту»
textual
Листинг программы
char strings[10][32], str[32];
FILE *f;
int count = 0;
if((f = fopen ("input.txt", "r") == NULL){
return 1;
}
while (feof(f) == 0 || count > 10)
{
fscanf (f, "%s", str);
strcpy(strings[count++], str);
}
fclose (f);
Объяснение кода листинга программы
- Объявляются массив строк и буферная строка
- Открывается файл для чтения
- Проверяется успешность открытия файла
- Если файл не открылся, то возвращается 1
- Запускается цикл, который будет выполняться пока не достигнется конец файла или не будет прочитано более 10 строк
- В каждой итерации цикла считывается строка из файла и сохраняется в буферной строке
- Считанная строка копируется в соответствующую ячейку массива строк
- Увеличивается счетчик количества прочитанных строк
- Закрывается файл
- Возвращается 0, что означает успешное выполнение программы