У меня есть вопрос, с которым, я надеюсь, вы мне поможете.
Я пытаюсь прочитать символы из файла, для которого я буду выполнять частотный анализ. Я решил, что самый простой способ для этого - иметь массив с индексом 0-255 и увеличивать соответствующий индекс (из десятичного значения чтения символов) на единицу каждый раз, когда этот символ читается. У меня проблема в том, что сохраняются только 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);
, но я м не уверен, как это реализовать.