Найти символ, встречающийся в файле наибольшее число раз - C (СИ) (74603)

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

Есть вот такая задачка: Дан текстовый файл in. Найти символ, встречающийся в файле наибольшее число раз. Если таких символов несколько, найти их все. Переписать эти символы в другой файл out. Я попытался решить, но не совсем знаю как, заранее благодарен за все, что вы поправите. До алгоритма я догадался, а реализовать оказалось сложнее, помогите нубу и если не сложно исправьте код.
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <string.h>
void main ()
{
setlocale (LC_ALL, "Russian");
char znacheniya[256];
int max=0;
FILE *in;
FILE *out;
in=fopen ("RGR/in.txt", "r");
out=fopen ("RGR/out.txt", "w");
if(in == NULL)
    {
        printf("Файл не открывается ");
        return 0;
    }
    for (int i=1; i<257; i++)                  
        {
            while (strstr(in;\xi))         //тут не все ладно, помоему strstr не работает просто с файлом, к тому же я не уверен в том, что правильно записал код символа, который будет изменяться с течением цикла
            {
                    znacheniya[i]++;
            }
        }
for (int i=1; i<257; i++)
    {
        if (znacheniya[i]>max)
            max=znacheniya[i];       //нашел максимальное кол-во повторений
    }
for (int i=1; i<257; i++)
    {
        if (znacheniya[i]==max)
        {
            fprintf (out,"\xi");                  // та же проблема с кодом символа. Здесь пытался найти те символы, что повторяли max кол-во раз и сразу записать их в файл.
        }
    }
if (fclose(out))
    printf("Ошибка при закрытии файла.\n");              // правильно ли я файл закрыл?
getch();

Код к задаче: «Найти символ, встречающийся в файле наибольшее число раз - C (СИ) (74603)»

textual
#include <stdio.h>
#include <stdlib.h>
 
//Дан текстовый файл in. Найти символ, встречающийся
//в файле наибольшее число раз. Если таких символов несколько,
//найти их все. Переписать эти символы в другой файл out.
 
void help(const char *);
int found_copy_sym(FILE *, FILE *, char );
 
int main(int argc, char const **argv){  
  if (argc!=4){
    help(argv[0]);    
  }
  FILE *in = NULL, *out = NULL;
 
  if (NULL==(in=fopen(argv[2], "rb"))){
    printf("[error] wrong open for reading %s file. abort\n", argv[3]);
    exit(3);
  }
  if (NULL==(out=fopen(argv[3], "wb"))){
    printf("[error] wrong open for writing %s file. abort\n", argv[4]);
    exit(4);
  }
  int count = found_copy_sym(in, out, *argv[1]);    
  fclose(in);
  fclose(out);    
  if (count){
    printf("Found: %d sym: %s\n", count, argv[1]);
  } else {
    printf("Not found sym: %s\n", argv[1]);
    remove(argv[3]);
  }    
  return 0;
}
 
void help(const char *progname){
  printf("usage: %s <sym_value_for_find_in_file:)> [infile] [outfile]\n", progname);
  exit(0);
}
 
int found_copy_sym(FILE *in, FILE *out, char sym){
  int count=0;
  while(!feof(in)){
    char tmp;    
    fread(&tmp, sizeof(tmp), 1, in);
    if (tmp==sym){
      fprintf(out, "%c", sym);    
      count++;
    }
  }
  if (!count) return 0;
  return count;    
}

15   голосов, оценка 4.267 из 5


СОХРАНИТЬ ССЫЛКУ