Отсортировать список в порядке их возрастания - C (СИ)

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

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

Здравствуйте, хотелось бы попросить помочь с задачей. Дан расположенный в файле список слов. Отсортировать список в порядке их возрастания и записать результат в файл. Входной файл - input.txt: первая строка - количество слов (<=20), вторая и далее строка - одно слово. Выходной файл - output.txt: каждая срока - одно слово отсортированного списка. Для подсчёта размера слова, используется эта функция:
int KE(char strF[]){
    int i=-1;
    while (strF[++i]);
    return i;
}
Содержание входного файла - произвольное. Спасибо.

Решение задачи: «Отсортировать список в порядке их возрастания»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef char String[32];
 
//-----------------------------------------------------------------------------
FILE* FileOpen(const char fname[], const char attr[])
{
    FILE* f = fopen(fname, attr);
 
    if (f == NULL)
    {
        perror(fname);
        exit(EXIT_FAILURE);
    }
 
    return f;
}
//-----------------------------------------------------------------------------
unsigned GetLine(char* buff, unsigned size, FILE* f)
{
    unsigned len = 0;
    char ch;
 
    for (; ((ch = fgetc(f)) != EOF) && (ch != '\n') && len < (size - 1); ++len)
    {
        *buff++ = ch;
    }
 
    *buff = 0;
 
    return len;
}
//-----------------------------------------------------------------------------
unsigned Load(FILE* f, String** array)
{
    String buff;
    fgets(buff, sizeof(String), f);
 
    int size = atoi(buff);
 
    if (size < 1)
    {
        fprintf(stderr, "size is null ...");
        exit(EXIT_FAILURE);
    }
 
    *array = malloc(sizeof(String) * size);
 
    int i = 0;
 
    while ((GetLine(buff, sizeof(buff), f)) && (i < size))
    {
        strcpy((*array)[i++], buff);
    }
 
    return i;
}
//-----------------------------------------------------------------------------
int StrLenCmp(const void* first, const void* second)
{
    return strlen((const char*) first) - strlen((const char*) second);
}
//-----------------------------------------------------------------------------
void Print(FILE* f, String* array, unsigned size)
{
    unsigned i;
 
    for (i = 0; i < size; ++i)
    {
        fprintf(f, "%s\n", array[i]);
    }
}
//-----------------------------------------------------------------------------
 
int main()
{
    FILE* finput = FileOpen("input.txt", "r");
    FILE* foutput = FileOpen("output.txt", "w");
 
    String* array;
    unsigned size = Load(finput, &array);
 
    qsort(array, size, sizeof(String), StrLenCmp);
 
    Print(stdout, array, size);
    Print(foutput, array, size);
 
    fclose(foutput);
    fclose(finput);
 
    return EXIT_SUCCESS;
}

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

В этом коде представлена сортировка массива строк в порядке возрастания их длины. Вот список действий, которые выполняет код:

  1. Включающие директивы: Первый #include <stdio.h> подключает функции для работы с файлами и вывода в консоль. Второй #include <stdlib.h> подключает функции для работы с памятью. Третий #include <string.h> подключает функции для работы со строками.
  2. Определение типа данных: Строка typedef char String[32]; объявляет тип данных String как массив символов размером 32.
  3. Функции: Функция FileOpen открывает файл с указанным именем и атрибутом. Если файл не может быть открыт, функция выводит сообщение об ошибке и завершает программу. Функция GetLine считывает строку из файла, используя функцию fgetc, и сохраняет ее в буфере. Функция Load считывает размер массива из файла, а затем заполняет массив строками, используя функцию GetLine. Функция StrLenCmp сравнивает два указателя на строки и возвращает разницу их длин. Функция Print выводит элементы массива в консоль.
  4. Основная программа: Программа открывает входной файл input.txt и выходной файл output.txt. Затем она считывает размер массива из входного файла и заполняет массив строками. Массив сортируется с помощью функции qsort с использованием функции StrLenCmp в качестве критерия сортировки. Отсортированный массив выводится в консоль и записывается в выходной файл. В конце программа закрывает файлы и возвращает успешный код завершения.

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


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

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

13   голосов , оценка 4.077 из 5
Похожие ответы