Найти символ, встречающийся в файле наибольшее число раз - C (СИ) (74693)
Формулировка задачи:
Задача программы - найти символ, встречающийся в файле(дан файл F) наибольшее число раз. Если таких символов несколько, найти их все. Переписать эти символы в другой файл G.
Решение задачи: «Найти символ, встречающийся в файле наибольшее число раз»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> enum { MAX_SIZE = 256 }; typedef struct CountChar{ char chr; unsigned cnt; }CountChar; typedef struct CounterChars{ struct CountChar cchr[MAX_SIZE]; int size; }CounterChars; void addchar(CounterChars *, const char); char *maxcount(const CounterChars *, char [MAX_SIZE]); int main(void){ FILE *f = fopen("F", "r"); if (!f){ perror("File error"); exit(EXIT_FAILURE); } CounterChars cntr = { .size=0 }; while (!feof(f)) addchar(&cntr, fgetc(f)); freopen("G", "w", f); if (!f){ perror("File error"); exit(EXIT_FAILURE); } char chrs[MAX_SIZE]; fputs(maxcount(&cntr, chrs), f); fclose(f); return EXIT_SUCCESS; } void addchar(CounterChars *cntr, const char chr){ int i = 0; for (; (i < cntr->size) && (cntr->cchr[i].chr != chr); ++i); if (i == cntr->size){ cntr->cchr[i].chr = chr; cntr->cchr[i].cnt = 1; ++cntr->size; }else ++cntr->cchr[i].cnt; } char *maxcount(const CounterChars *cntr, char chrs[MAX_SIZE]){ unsigned maxcnt = 0; for (int i = 0; i < cntr->size; ++i){ if (cntr->cchr[i].cnt > maxcnt) maxcnt = cntr->cchr[i].cnt; } int size = 0; for (int i = 0; i < cntr->size; ++i){ if (cntr->cchr[i].cnt == maxcnt) chrs[size++] = cntr->cchr[i].chr; } chrs[size++] = '\0'; return chrs; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д