0

次の課題があり、少し助けが必要です ;)

書き込むプログラム: ファイルは 8 ビット シンボルの行として扱われます。

  1. これらのシンボルの頻度 (発生) を数えます
  2. 記号の後にこれらの記号の頻度を数えます (前の文字が指定されている場合、最初の文字の前はコード 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;

編集:それは今良いですか?

4

1 に答える 1

1

今、私は助けが必要です.2*ポイントを書く最良の方法は何ですか?

2D 配列を使用し、前に見た文字を追跡する必要があることを除いて、現在行っているのとほぼ同じです。

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

もちろん、配列を印刷するときは両方の次元を処理する必要があります。

于 2015-03-25T21:22:24.780 に答える