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