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