Отсортировать содержимое файла по алфавиту - 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;
            }
        }
}

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

В этом коде:

  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
Похожие ответы