lzw用C语言实现报告_第1页
lzw用C语言实现报告_第2页
lzw用C语言实现报告_第3页
lzw用C语言实现报告_第4页
lzw用C语言实现报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重庆交通大学信息科学与工程学院综合性设计性实验报告专 业: 通信工程专业11级 学 号: 631106040 姓 名: 实验所属课程: 信 息 论 与 编 码 实验室(中心): 信息技术软件实验室 指 导 教 师 : 李益才 2013年11月教师评阅意见:签名: 年 月 日实验成绩:一、题目LZW编码一串代码并译码二、仿真要求要求:用任意一门程序语言编写lzw编码的编码与译码的方法,使之实现一段代码的编码与译码。三、仿真方案详细设计LZW编码算法字典初始化为前三个字典为a,b,c其他为空的字典,当前前缀P初始化为空;读入当前字符到C(即字符流中的下一个字符);判断P+C是否在字典中,如果在字典

2、中,则用C扩展P,即P=P+C;否则输出与当前前缀P相对应的码字,同时将P+C添加到字典中并令P=C,即重新置当前前缀;判断字符流结束与否,如果没有结束,转,否则把代表当前前缀P的码字输出到码字流;结束。LZW编码的过程2、LZW译码算法初始化字典,并读入一个码字W;试读一个码字K,如果不存在码字K可读,则输出W对应的字符串,转;否则,在W对应的字符(串)末尾加入码字K的第一个字符,形成的字符串加入字典(如果K还未在字典中出现,则W+FirstChar(W)放入字典)。然后输出W对应的字符(串),同时W=K(重新赋W的值);转;算法结束。LZW编码的过程:(code函数)编码详细的设计方案:首

3、先初始化字典数组:前三个数为a,b,c其他为空。再输入字符串,将当前前缀为p,输入为c,再P+C。查询字典 int LZW:StringIsDic(string e)/判断字符是否在字典里面for(int b=0; b<200; b+)if(e=Dicb) return 1;return 0;编辑字典int LZW:codeDic(string f)/通过字符串输出对应字典序号int w=0;for(int y=0;y<200;y+)if(f=Dicy)w=y+1;break;return w;(decode函数)译码详的设计方案:pw,pc储存当前字符和初始字符,查询pw+pc相

4、应的码字是否在字典中改变字典。最后查询字典输出。查询字典:int LZW:IntIsDic(int g,int j)/判断整数g是否在字典中for(int i=0;i<j+3;i+)if(g=i)return 1;return 0;四、仿真结果及结论五、总结与体会在上课听完老师讲解之后觉得lzw编码的过程很复杂,感觉也很难理解。通过这次的实验对lzw编码的整个编码过程和译码过程有了深入的理解。对其中信息前缀和当前码字关系,以及怎么变化也有了理解和体会。开始虽然理解了但在以前学习的C语言基础上对字符串处理始终不熟悉,,也不知如何去生成字符串数组和使用字符串数组,通过老师介绍以及在网上查阅资

5、料。开始有想过用andriod页面布局开控制输入输出以及处理字符串数组,但是因为android对程序过程以及在变换当前缀和输入码字不好解决就放弃了,依旧采用了c+,利用了字符串和字符数组来结合处理。通过这次实验对比了面向过程和面向对象这两门语言,学会了灵活使用字符串和字符数组。通过这次实验理解了通过类设置一类实体属性,从而简化了这一类实体处理。六、主要仿真代码#include<iostream>#include<string>using namespace std;const int N=200;class LZWprivate:string Dic200;public

6、:int codesN;LZW()Dic0='a'Dic1='b'Dic2='c'string *p=Dic;/void decode(int codesN);void decode(int codes );void code(string csN);int StringIsDic(string e);int codeDic(string f);int IntIsDic(int g,int j);/string decodeDic(int g);/void decodedisplay(int z);void codedisplay(int g);

7、void LZW:decode(int codesN)LZW:LZW();string p1,p2,OutStringN;int w,p,out;p=codes0;int j=0;for(int i=1;i<N;i+)w=codesi; if(w<0)p1=Dicp-1; out=p;OutStringj+1=p1;i=N-1;cout<<out<<"译码后是"<<OutStringj+1<<endl;/break;else p1=Dicp-1;if(IntIsDic(w,j)=0)/if(i=N-1)p2=p1;

8、p=w;elsep2=Dicw-1;Dic3+j=p1+p2;j+;out=p;p=w;OutStringj=p1;cout<<out<<"译码后是"<<OutStringj<<endl; /*void LZW:decodedisplay(int g)cout<<"经过LZW译码后的码子如下:"<<endl;for(int i=0;i<=g;i+)cout<<OutStringj<<endl;cout<<endl;cout<<&q

9、uot;经LZW译码后的词典如下:"<<endl;for(int r=0;r<N;r+)cout<<r+1<<Dicr<<endl;*/int LZW:IntIsDic(int g,int j)/判断整数g是否在字典中for(int i=0;i<j+3;i+)if(g=i)return 1;return 0;void LZW:code(string csN)/译码string P,C,K;P=cs0;int j=0;for(int i=1;i<N;i+)C=csi;K=P+C;if(StringIsDic(K)P=K;

10、elsecodesj=codeDic(P);Dic3+j=K;P=C; j+;if(N-1=i)codesj=codeDic(P); codedisplay(j);/decode(codesj);int LZW:StringIsDic(string e)/判断字符是否在字典里面for(int b=0; b<200; b+)if(e=Dicb) return 1;return 0;int LZW:codeDic(string f)/通过字符串输出对应字典序号int w=0;for(int y=0;y<200;y+)if(f=Dicy)w=y+1;break;return w;void

11、 LZW:codedisplay(int g)cout<<"经过LZW编码后的码子如下:"<<endl;for(int i=0;i<=g;i+)cout<<codesi;cout<<endl;cout<<"经LZW编码后的词典如下:"<<endl;for(int r=0;r<g+3;r+)cout<<r+1<<Dicr<<endl;int main()/主函数即使处理过程LZW t;string CSstreamN;int length;cout<<"请输入所求码子序列的长度:"cin>>length;while(length>=N)cout<<"该长度太

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论