⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freq.c

📁 查找一个文件中相同字符出现次数
💻 C
字号:
/* Counts the frequency of every character in a file.  */
/* By Peter Boucher, boucher@csl.sri.com */

#include <stdio.h>

FILE *my_fopen(file, type)
char *file, *type;
{
  FILE *fp;

  if (fp = fopen(file, type))
    return fp;
  (void) fprintf(stderr, "Can't open '%s' for '%s'\n", file, type);
  exit(1);
}


main(argc, argv)
int argc;
char **argv;
{
  register FILE *inf=((argc > 1) ? my_fopen(argv[1], "rb") : stdin);
  register FILE *outf=((argc > 2) ? my_fopen(argv[2], "w") : stdout);
  unsigned long cnt[256], sum=0, avg, lowthresh, highthresh, lowlim, highlim;
  register unsigned int i;

  for (i=0; i<256; i++) cnt[i] = 0L;

  while ((i=fgetc(inf)) != EOF)
  {
    ++cnt[i];
  }

  for (i=0; i<256; i++) sum += cnt[i];
  avg = sum/256;

  if (avg < 50L) 
  {
    lowthresh=avg/2L;
    highthresh = avg + (avg - lowthresh);
    lowlim = lowthresh/2L;
    highlim = highthresh*2L;
  } else if (avg < 200L)
  {
    lowthresh=(85L*avg)/100L;
    highthresh = avg + (avg - lowthresh);
    lowlim = (2L*lowthresh)/3L;
    highlim = (3L*highthresh)/2L;
  }  else if (avg < 1000L)
  {
    lowthresh=(92L*avg)/100L;
    highthresh = avg + (avg - lowthresh);
    lowlim = (3L*lowthresh)/4L;
    highlim = (4L*highthresh)/3L;
  } else if (avg < 10000L)
  {
    lowthresh=(965L*avg)/1000L;
    highthresh = avg + (avg - lowthresh);
    lowlim = (5L*lowthresh)/6L;
    highlim = (6L*highthresh)/5L;
  } else
  {
    lowthresh=(985L*avg)/1000L;
    highthresh = avg + (avg - lowthresh);
    lowlim = (9L*lowthresh)/10L;
    highlim = (10L*highthresh)/9L;
  }

  fprintf(outf, "average number of occurances/byte = %10ld.\n", avg);
  for (i=0; i<256; i++)
  {
    if ((cnt[i] < lowthresh) || (cnt[i] > highthresh)) {
      fprintf(outf, "%2.2x %10ld %s\n", i, cnt[i], (cnt[i] < lowthresh) ? "<" : ">");
      if ((cnt[i] < lowlim) || (cnt[i] > highlim))
      {
.fprintf(outf, "%2.2x %10ld GHAAK!\n", i, cnt[i]);
.exit(1);
      }
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -