欢迎来到天天文库
浏览记录
ID:50978852
大小:46.50 KB
页数:5页
时间:2020-03-16
《算术编码的C++实现.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、算术编码的C++实现#include#include#include#includeusingnamespacestd;#defineN50//输入的字符应该不超过50个structL//结构用于求各字符及其概率{charch;//存储出现的字符(不重复)intnum;//存储字符出现的次数doublef;//存储字符的概率};//显示信息voiddisp();//求概率函数,输入:字符串;输出:字符数组、字符的概率数组;返回:数组长度;i
2、ntproba(stringstr,charc[],longdoublep[],intcount);//求概率的辅助函数intsearch(vectorarch,char,intn);//编码函数,输入:字符串,字符数组,概率数组,以及数组长度;输出:编码结果longdoublebma(charc[],longdoublep[],stringstr,intnumber,intsize);//译码函数,输入:编码结果,字符串,字符数组,概率数组,以及它们的长度;输出:字符串//该函数可以用于检测编码是否正
3、确voidyma(stringstr,charc[],longdoublep[],intnumber,intsize,longdoubleinput);intmain(){stringstr;//输入要编码的String类型字符串intnumber=0,size=0;//number--字符串中不重复的字符个数;size--字符串长度charc[N];//用于存储不重复的字符longdoublep[N],output;//p[N]--不重复字符的概率,output--编码结果disp();cout<<"输入要
4、编码的字符串:";getline(cin,str);//输入要编码的字符串size=str.length();//字符串长度number=proba(str,c,p,size);//调用求概率函数,返回不重复字符的个数cout.setf(ios::fixed);//“魔法配方”规定了小数部分的个数cout.setf(ios::showpoint);//在此规定编码结果的小数部分有十个cout.precision(10);output=bma(c,p,str,number,size);//调用编码函数,返回编码
5、结果yma(str,c,p,number,size,output);//调用译码函数,输出要编码的字符串,//以验证编码是否正确return0;}//显示信息voiddisp(){cout<6、n";cout<pt;//定义了结构类型的向量,用于同时存储不重复的字符和其概率Ltemp;//结构类型的变量temp.ch=str[0];//暂存字符串的第一个字符,它的个数暂设为1temp.7、num=1;temp.f=0.0;pt.push_back(temp);//将该字符及其个数压入向量for(inti=1;i8、=0){pt[k].num++;break;}else{pt.push_back(temp);break;}}}for(i=0;i
6、n";cout<pt;//定义了结构类型的向量,用于同时存储不重复的字符和其概率Ltemp;//结构类型的变量temp.ch=str[0];//暂存字符串的第一个字符,它的个数暂设为1temp.
7、num=1;temp.f=0.0;pt.push_back(temp);//将该字符及其个数压入向量for(inti=1;i
8、=0){pt[k].num++;break;}else{pt.push_back(temp);break;}}}for(i=0;i
此文档下载收益归作者所有