实现功能
1.实现自动统计输入文本的字符个数以及各字符的权值;
2.实现输入字符及各权值进行Huffman编码;
3.实现从文档保存数据及读取数据;
4.各字符及其权值是由单链表的形式存储的;
5.译码是每50个01字符输出换行;
**注**Huffman树的建立是通过课本方法建立,其方式就不多说了。
代码实现
huffman.cpp
#include "huffman3.h"
void Huffman :: readtext(char *file)
{ //读取文件中的数据,包括空格
indata.open(file);
if (! indata)
{
cout << "ERROR!" << endl;
}
char temp[100];
indata.getline(temp, 100);
text += temp;
}
void Huffman :: savetext(char *file)
{ //保存数据到文件
outdata.open(file);
if (! outdata)
{
cout << "ERROR" << endl;
}
outdata << text;
}
void Huffman :: readcode(char *file)
{ //读取代码
indata.open(file);
indata >> huffmancode;
}
/*void Huffman::ReadCodeFromFile(char *filename)
{ //读取代码(这个也可以用)
ifstream infile(filename);
if (!infile)
{
cerr << "无法打开文件!" << endl;
return;
}
infile >> huffmancode;
cout << huffmancode << endl;
}*/
void Huffman :: savecode(char *file)
{
outdata.open(file);
if (!outdata)
{
cout << "ERROR" << endl;
}
outdata << huffmancode;
}
void Huffman::HuffmanCoding()
{ //huffman树的建立
if (number <= 1)
return;
int m = 2 * number - 1; //哈弗曼树所需节点数
huffmantree = new HTNode[m + 1]; //0号单元未使用
huffmancharslist p;
p = l -> next;
int i;
for (i = 1; i <= number; ++i)//初始化
{
huffmantree[i].weight = p -> weight;
huffmantree[i].parent = 0;
huffmantree[i].lchild = 0;
huffmantree[i].rchild = 0;
p = p -> next;
}
for (i = number + 1; i <= m; ++i)
{
huffmantree[i].weight = 0;
huffmantree[i].parent = 0;
huffmantree[i].lchild = 0;
huffmantree[i].rchild = 0;
}
for (i = number + 1; i <= m; ++i)//建哈弗曼树
{
int s1, s2;
select(i - 1, s1,