我必须存储字节(256种可能性)及其频率,从文件中读取它并将其存储在结构数组中。
它必须读取简单的文件,如txt,png,mp3和pdf。我知道霍夫曼编码理论,但我有问题得到频率表。我很感激用C语言提示。
例如:读完一个文件后,我得到三个字节:0000 1111,11111 0000,1111 0000
Bytes Frequency
0000 1111 1
1111 0000 2
这是我到目前为止所得到的:
#define NUM_BYTES 256
typedef struct Node{
unsigned int frequency;
char* symbol;
} Node;
GetByteFrequency( char* fileName, Node* table){
FILE* filep = fopen( fileName, "r" );
fread(&table, 1, sizeof(char), filep);
fclose(filep);
}
int main(){
Node frequencyTable[NUM_BYTES-1];
GetByteFrequency("text.txt", frequencyTable);
return 0;
}
这段代码不起作用,只是为了让我知道我在做什么。
答案 0 :(得分:0)
这取决于您如何在text.txt中存储表格。
我建议一次读取/写入整个数组,这样可以省去解析文件的一些问题。
例如,您可以
char freqTable[NUM_BYTES];
FILE* filep = fopen("data.bin", "wb");
fwrite(freqTable, sizeof(char), NUM_BYTES, filep);
然后直接读取数组
FILE* filep = fopen("data.bin", "rb");
fread(freqTable, sizeof(char), NUM_BYTES, filep);
请注意,数据存储为二进制,因此不需要进行文本解析
答案 1 :(得分:0)
您可以构建一个简单的字节频率表,如下所示:
unsigned freq[256] = {0}; /* indexed by byte values */
int ch;
while ((ch = fgetc(filep)) != EOF) {
++freq[ch];
}
循环完成后,freq [0]是字节0发生的次数等等。