Найти четыре цифровых символа, которые чаще всего встречаются в текстовом файле - C (СИ)

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

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

Задача: Написать программу языке СИ, которая находит четыре цифровых символы, которые чаще всего встречаются в текстовом файле. Текстовый файл состоит из букв латинского алфавита, цифровых символов, знаков препинания и пробельных символов. программа выводит на экран найденные цифровые символы, а также сколько раз каждый из них встречается в файле. Для создания текстового файла пользоваться редактором Блокнот.

Решение задачи: «Найти четыре цифровых символа, которые чаще всего встречаются в текстовом файле»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
typedef struct _TInfo {
    char digit;
    int count;
}   TInfo;
 
//-----------------------------------------------------------------------------
void beforeQuit() {
 
    system("pause");
}
//-----------------------------------------------------------------------------
FILE* getFile(int argc, char* argv[]) {
 
    FILE* f = NULL;
 
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <FILE.txt>\n", argv[0]);
        exit(EXIT_FAILURE);
    }
 
    if ((f = fopen(argv[1], "r")) == NULL) {
        perror(argv[1]);
        exit(EXIT_FAILURE);
    }
 
    return f;
}
//-----------------------------------------------------------------------------
TInfo* init(TInfo digit[]) {
 
    char ch;
    for (ch = '0'; ch <= '9'; ++ch) {
        digit[ch - '0'].digit = ch;
        digit[ch - '0'].count = 0;
    }
 
    return digit;
}
//-----------------------------------------------------------------------------
TInfo* getCountDigits(FILE* f, TInfo digit[]) {
 
    char ch;
    while ((ch = fgetc(f)) != EOF) {
        if (isdigit(ch)) {
            digit[ch - '0'].count++;
        }
    }
 
    return digit;
}
//-----------------------------------------------------------------------------
void printCountDigits(TInfo digit[], unsigned len) {
 
    unsigned i;
    for (i = 0; i < len; ++i) {
        printf("[%c]: %d\n", digit[i].digit, digit[i].count);
    }
    printf("\n");
}
//-----------------------------------------------------------------------------
int compare(const void* a, const void* b) {
 
    return ((TInfo*)b)->count - ((TInfo*)a)->count;
}
//-----------------------------------------------------------------------------
 
int main(int argc, char* argv[]) {
 
    FILE* f = getFile(argc, argv);
    TInfo digit[10];
    init(digit);
 
    getCountDigits(f, digit);
 
    qsort(digit, 10, sizeof(TInfo), compare);
 
    printCountDigits(digit, 4);
 
    fclose(f);
 
    return EXIT_SUCCESS;
}

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

  1. Код начинается с заголовка, который включает в себя необходимые заголовочные файлы и объявление структуры TInfo.
  2. Затем следуют функции:
    • beforeQuit() - функция, которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу.
    • getFile() - функция, которая открывает файл для чтения или выводит сообщение об ошибке, если файл не может быть открыт.
    • init() - инициализирует массив TInfo с символами от '0' до '9' и устанавливает счетчик на 0 для каждого из них.
    • getCountDigits() - проходит через каждый символ в файле и увеличивает счетчик для соответствующего символа в массиве TInfo, если символ является цифровым.
    • printCountDigits() - выводит количество каждого цифрового символа в массиве TInfo.
    • compare() - функция сортировки, которая сравнивает два элемента массива TInfo по их счетчику.
  3. В функции main() открывается файл с помощью функции getFile().
    • Создается массив TInfo с 10 элементами.
    • Инициализируется с помощью функции init().
    • Получается количество каждого цифрового символа в файле с помощью функции getCountDigits().
    • Массив TInfo сортируется по счетчику с помощью функции qsort().
    • Выводятся 4 наиболее часто встречающихся цифровых символа с помощью функции printCountDigits().
    • Файл закрывается с помощью функции fclose().
  4. Программа завершается с успехом (EXIT_SUCCESS).

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


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

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

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