计算文件中8位符号的频率

时间:2015-03-25 21:16:38

标签: c data-compression

我有下一个挑战,需要一些帮助;)

  

要写入的程序:该文件被视为一行8位符号。

     
      
  1. 计算这些符号的频率(发生率)
  2.   
  3. 在符号后计算这些符号的频率(如果给出前一个字符,则在第一个字符号前面是代码为0的符号)。
  4.         

    该程序适用于doc,pdf,mp4,jpg(最小1MB文件)。

所以我写了一些代码;这是:

主:

int array[256] = {0};
double charArray[256][256] = {{0}};

FILE *fp = fopen("test.txt", "rb");

int c;
int b = 0;

printf("File content: \n");
while((c = fgetc(fp)) != EOF)
{
    printf("%2x", c);
    ++charArray[b][c];
    ++array[c];
    b=c;
}

int k;

printf("\nSymbols frequency counter: \n");
for(k=0;k<256;k++) {
    if(array[k] > 0 ) {
        printf("char %2x: %d times \n", k, array[k]);
    }
}


int y,z;
printf("Symbols after symbols frequency counter: \n");

for(y=0;y<256;y++){

    for(z=0;z<256;z++){

        if(charArray[y][z] > 0) {
        printf("char %2x after char %2x: %.0f times\n", z, y, charArray[y][z]);
        }
    }
}

fclose(fp);

return 0;
编辑:现在好吗?

1 个答案:

答案 0 :(得分:1)

  

现在我需要一个帮助,写一个2 *点的最佳方法是什么?

与您目前正在做的几乎相同,除了您需要使用2D数组并跟踪您看到的前一个字符,例如

++charArray[b][c];
b = c;

当然,在打印阵列时,您需要处理这两个尺寸。