Отсортировать содержимое файла по алфавиту - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дали лабу,писать можно только на C. С ним не особо знаком. Вопрос такой. После чтения всех символов из файла, мне нужно отсортировать полученное по алфавиту. Пробую обычным пузырьком, но после него у меня компиль(Visual Studio 2017) ругается на free(text). Немного не понимаю, как я порчу кучу. Может я торможу, подскажите пожалуйста.
Листинг программы
  1. //19. Задан текстовый файл F1, состоящий из произвольной последовательности буквенных символов. Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены, и переписать новый текст в файл F2.
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. #include <Windows.h>
  7. #include <malloc.h>
  8. void bubble(char *i, int n);
  9. void main(void)
  10. {
  11. SetConsoleCP(1251);
  12. SetConsoleOutputCP(1251);
  13. char *text = NULL;
  14. int size = 0;
  15. FILE *f;
  16. f = fopen("F:\Input.txt", "r");
  17. if (f != NULL)
  18. {
  19. fseek(f, 0, SEEK_END);
  20. size = ftell(f);
  21. fseek(f, 0, SEEK_SET);
  22. text = (char*)malloc(size * sizeof(char));
  23. fread(text, size, 1, f);
  24. }
  25. fclose(f);
  26. bubble(text, strlen(text));
  27. printf("%s", text);
  28. f = fopen("F:\Output.txt", "w");
  29. fwrite(text, 1, size, f);
  30. free(text);
  31. fclose(f);
  32. _getch();
  33. }
  34. void bubble(char *i, int n)
  35. {
  36. int a, b;
  37. char t;
  38. for (a = 0; a < n; a++)
  39. for (b = n - 1; b >= a; b--)
  40. {
  41. if (i[b - 1] > i[b])
  42. {
  43. t = i[b - 1];
  44. i[b - 1] = i[b];
  45. i[b] = t;
  46. }
  47. }
  48. }

Решение задачи: «Отсортировать содержимое файла по алфавиту»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5.  
  6. void bubble(char *i, int n);
  7.  
  8. int main(void)
  9. {
  10.     char *text = NULL;
  11.     int size = 0;
  12.     FILE *f;
  13.     f = fopen("c:\\in.txt", "r");
  14.     if (f != NULL)
  15.     {
  16.         fseek(f, 0, SEEK_END);
  17.         size = ftell(f);
  18.         fseek(f, 0, SEEK_SET);
  19.         text = (char*)malloc(size * sizeof(char)+1);
  20.         fread(text, size, 1, f);
  21.     }
  22.     text[size-1]='\0';
  23.     fclose(f);
  24.     bubble(text, strlen(text));
  25.     printf("%s", text);
  26.     f = fopen("c:\\out.txt", "w");
  27.     fwrite(text, 1, size, f);
  28.  
  29.     free(text);
  30.     fclose(f);
  31.     _getch();
  32. }
  33.  
  34. void bubble(char *i, int n)
  35. {
  36.     int a, b;
  37.     char t;
  38.  
  39.     for (a = 0; a < n-1; a++)
  40.         for (b = n - 2; b >= a; b--)
  41.         {
  42.             if (i[b] > i[b+1])
  43.             {
  44.                 t = i[b];
  45.                 i[b] = i[b+1];
  46.                 i[b+1] = t;
  47.             }
  48.         }
  49. }

Объяснение кода листинга программы

В этом коде:

  1. В функции main() открывается файл c:\\in.txt для чтения и файл c:\\out.txt для записи.
  2. Считывается размер файла c:\\in.txt с помощью функций fseek() и ftell().
  3. Массив символов text выделяется с помощью malloc() и заполняется содержимым файла с помощью fread().
  4. Добавляется нулевой символ в конец массива text.
  5. Вызывается функция bubble() для сортировки массива text по алфавиту.
  6. Содержимое массива text выводится на экран с помощью функции printf().
  7. Содержимое массива text записывается в файл c:\\out.txt с помощью функции fwrite().
  8. Массив text освобождается с помощью функции free().
  9. Файл c:\\out.txt закрывается с помощью функции fclose().
  10. Подтверждается нажатием клавиши с помощью функции _getch(). В функции bubble() используется алгоритм сортировки пузырьком.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы