Отсортировать содержимое файла по алфавиту - C (СИ)
Формулировка задачи:
Дали лабу,писать можно только на C. С ним не особо знаком. Вопрос такой. После чтения всех символов из файла, мне нужно отсортировать полученное по алфавиту. Пробую обычным пузырьком, но после него у меня компиль(Visual Studio 2017) ругается на free(text). Немного не понимаю, как я порчу кучу. Может я торможу, подскажите пожалуйста.
Листинг программы
- //19. Задан текстовый файл F1, состоящий из произвольной последовательности буквенных символов. Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены, и переписать новый текст в файл F2.
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <Windows.h>
- #include <malloc.h>
- void bubble(char *i, int n);
- void main(void)
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- char *text = NULL;
- int size = 0;
- FILE *f;
- f = fopen("F:\Input.txt", "r");
- if (f != NULL)
- {
- fseek(f, 0, SEEK_END);
- size = ftell(f);
- fseek(f, 0, SEEK_SET);
- text = (char*)malloc(size * sizeof(char));
- fread(text, size, 1, f);
- }
- fclose(f);
- bubble(text, strlen(text));
- printf("%s", text);
- f = fopen("F:\Output.txt", "w");
- fwrite(text, 1, size, f);
- free(text);
- fclose(f);
- _getch();
- }
- void bubble(char *i, int n)
- {
- int a, b;
- char t;
- for (a = 0; a < n; a++)
- for (b = n - 1; b >= a; b--)
- {
- if (i[b - 1] > i[b])
- {
- t = i[b - 1];
- i[b - 1] = i[b];
- i[b] = t;
- }
- }
- }
Решение задачи: «Отсортировать содержимое файла по алфавиту»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <conio.h>
- #include <stdlib.h>
- void bubble(char *i, int n);
- int main(void)
- {
- char *text = NULL;
- int size = 0;
- FILE *f;
- f = fopen("c:\\in.txt", "r");
- if (f != NULL)
- {
- fseek(f, 0, SEEK_END);
- size = ftell(f);
- fseek(f, 0, SEEK_SET);
- text = (char*)malloc(size * sizeof(char)+1);
- fread(text, size, 1, f);
- }
- text[size-1]='\0';
- fclose(f);
- bubble(text, strlen(text));
- printf("%s", text);
- f = fopen("c:\\out.txt", "w");
- fwrite(text, 1, size, f);
- free(text);
- fclose(f);
- _getch();
- }
- void bubble(char *i, int n)
- {
- int a, b;
- char t;
- for (a = 0; a < n-1; a++)
- for (b = n - 2; b >= a; b--)
- {
- if (i[b] > i[b+1])
- {
- t = i[b];
- i[b] = i[b+1];
- i[b+1] = t;
- }
- }
- }
Объяснение кода листинга программы
В этом коде:
- В функции main() открывается файл
c:\\in.txt
для чтения и файлc:\\out.txt
для записи. - Считывается размер файла
c:\\in.txt
с помощью функций fseek() и ftell(). - Массив символов text выделяется с помощью malloc() и заполняется содержимым файла с помощью fread().
- Добавляется нулевой символ в конец массива text.
- Вызывается функция bubble() для сортировки массива text по алфавиту.
- Содержимое массива text выводится на экран с помощью функции printf().
- Содержимое массива text записывается в файл
c:\\out.txt
с помощью функции fwrite(). - Массив text освобождается с помощью функции free().
- Файл
c:\\out.txt
закрывается с помощью функции fclose(). - Подтверждается нажатием клавиши с помощью функции _getch(). В функции bubble() используется алгоритм сортировки пузырьком.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д