質問があります。ご協力いただければ幸いです。
周波数分析を実行するファイルから文字を読み取ろうとしています。これを行う最も簡単な方法は、インデックス 0 ~ 255 を持つ配列を用意し、char が読み取られるたびに対応するインデックスを (読み取り chars 10 進値から) 1 ずつインクリメントすることであると判断しました。私が抱えている問題は、7 ビット文字のみが保存されているように見えることです。コードについては、以下を参照してください。
int frequency(FILE *freqfilep)
{
printf("frequency function called!\n");
int start = 1;
int *frqarray = calloc(256,sizeof(int));
unsigned char tecken;
FILE *fp;
fp = fopen("freqfile.txt","r");
if (fp == NULL)
{
perror("Error in opening file");
start = 0;
}
do
{
tecken = fgetc(fp);
if (feof(fp))
{
start = 0;
}
else
{
frqarray[(int)tecken] ++;
}
}
while (start != 0);
printf("a%d\n", frqarray[97]);
printf("b%d\n", frqarray[98]);
printf("c%d\n", frqarray[99]);
printf("1%d\n", frqarray[49]);
printf("2%d\n", frqarray[50]);
printf("3%d\n", frqarray[51]);
printf("å%d\n", frqarray[134]);
printf("ä%d\n", frqarray[132])
printf("ö%d\n", frqarray[148]);
fclose(fp);
return 0;
}
私が読んでいるファイルには、次の文字が含まれています。
aaa bbb ccc 111 222 333 ååå äää ööö
したがって、コードの下部にあるprintfは次のようになります。
a3
b3
c3
13
23
33
å3
ä3
ö3
しかし、結果は
a3
b3
c3
13
23
33
å0
ä0
ö0
したがって、8ビット文字の読み取りに問題があると推測しています。フォーラムを少し調べたところ、このようなバッファを使用する必要があるという比較的似た投稿がいくつか見つかりましたがfread(&buffer, 256, 1, file);
、それを実装する方法がわからない。