⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 哈夫曼编码的源程序
💻 CPP
字号:
#include <iostream.h>
#include <fstream.h>
#include "huff.h"
#define max 1024
int num=0;
void main()
{
	HuffmanTree HT;
	HuffmanCode HC;
	//////////////////////////
	///////文件的读入过程	
	//////////////////////////
	int let[max],len=0;
	char temp;
	for(int i=0;i<max;i++){
		let[i]=0;
	}
	ifstream f("Sourcefile.txt");
	while(f.good()){
		temp=f.get ();
		let[int(temp)]++;
		len++;
	}
	for(int j=0;j<max;j++){
		if(let[j]!=0){
			cout<<char(j)<<':'<<let[j]<<endl;
			num++;
		}
	}
	f.close();
	////////把相应的字母存到zi把权值存到w
	char *zi=new char[num];
	int *w=new int[num];
	for(int k=0,p=0;k<max;k++){
		if(let[k]!=0){
			zi[p]=char(k);
			w[p]=let[k];
			p++;
		}
	}
	HuffmanCoding(HT,HC,zi,w,num);
	cout<<endl;
	cout<<"char        weight       huffmancode    "<<endl;
	for(i=1;i<=num;i++)
		cout<<HT[i].letter<<"        "<<HT[i].weight<<"        "<<HC[i]<<endl;
	//////////////////////////////////////////////////////////////////////////////////
	/////////////////进行huffman编码
	/////////////////把每个字符相应的编码存到HuffCode.txt
	////////////////////////////////////////////////////////////
	ofstream fo("HuffCode.txt");
	fo<<"char        weight       huffmancode    "<<endl;
	for(i=1;i<num;i++){
		fo<<HT[i].letter<<"        "<<HT[i].weight<<"        "<<HC[i]<<endl;
	}
	fo.close();

	int path[16]={0};
	print_htree_ldr(HT, 2*num-1, 0, path,HC);
	////////////////////////////////////////////////////////////////
	//////////////压缩文件
	///////////////////////////////////////////////////////////////
	f.open("Sourcefile.txt");
	ofstream codef("CodeFile.txt");
	while(f.good()){
		temp=f.get();
		for(i=1;i<=num;i++){
			if(temp==HT[i].letter)
				codef<<HC[i];
		}
	}
	f.close ();
	codef.close ();
	//////////////////////////////////////////////////////////
	///////////////根据codefile里面的压缩码进行编译
	///////////////////////////////////////
	f.open ("CodeFile.txt");
	fo.open ("TextFile.txt");
	int pht=2*num-1;
	while(f.good ()){
		temp=f.get ();
		if(temp=='0')
			pht=HT[pht].lchild ;
		else if(temp=='1')
			pht=HT[pht].rchild ;
		if(0<int(HT[pht].letter)&&1024>int(HT[pht].letter)){
			fo<<HT[pht].letter ;
			pht=2*num-1;
		}
	}
	//////////////////////////////////////////////		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -