Найти символ, встречающийся в файле наибольшее число раз - 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;
}

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


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

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

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