我有下一个挑战,需要一些帮助;)
要写入的程序:该文件被视为一行8位符号。
- 计算这些符号的频率(发生率)
- 在符号后计算这些符号的频率(如果给出前一个字符,则在第一个字符号前面是代码为0的符号)。
醇>该程序适用于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;
编辑:现在好吗?
答案 0 :(得分:1)
现在我需要一个帮助,写一个2 *点的最佳方法是什么?
与您目前正在做的几乎相同,除了您需要使用2D数组并跟踪您看到的前一个字符,例如
++charArray[b][c];
b = c;
当然,在打印阵列时,您需要处理这两个尺寸。