Сортировка строк файла по алфавиту - 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, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д