LZW编码编程实现(C++版).docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LZW编码的编程和实现 实验目的 编写源程序,实现LZW的编码和解码 实验要求 1.编码 输入若干字母(如abbababac),输出相应的编码 2.解码 输入若干数字(如122473),输出相应的字母 编程思想 1.编码 根缀表已知 1 A 2 B 3 C 编码 分析字符串流,从词典中寻找最长匹配串,即字符串P在词典中,而字符串P+后一个字符C不在词典中 此时,输出P对应的码字,将P+C放入词典中。 如第一步: 输入A 此时,A在表中,而AB不在表中,则输出A对应的码字1,同时将AB写入表中,此时表为 1 A 2 B 3 C 4 AB 编码输出为1 (A已编码) 第二步,输入B,B在词典中,而BB不在词典中,则输出2,将BB写入表中,此时表为 1 A 2 B 3 C 4 AB 5 BB 编码输出为12 (AB已经编码) .... 2.解码 根缀表为 1 A 2 B 3 C 定义如下变量 StringP :前一步码字流 pW : StringP的第一个字符 StringC :当前的码字流 cW : StringC的第一个字符 第一步 输出StringC 并StringP = StringC 如: 1解码为A,则StringC = A 那么 输出A,并令StringP = A --------------------------------------------------------------------------- 第二步 1.解码得到StringC,并输出StringC 2.将StringP + cW放入词典(如果当前码字不在词典中,则将StringP + cP放入词典中) 3.StringP = StringC 如: 第二步要解码为2,解码为B,则StringC=B,输出B (此时StringP = A) 将StringP+cW放入表中,即将AB放入表中,此时表为 1 A 2 B 3 C 4 AB 实验情况及分析 编码 解码 错误提示 附:源代码 #includeiostream #includestring #includeiomanip using namespace std; string dic[30]; int n; int find(string s)//字典中寻找,返回序号 { int temp=-1; for(int i=0;i30;i++) { if(dic[i]==s) temp=i+1; } return temp; } void init()//字典初始化 { dic[0]=a; dic[1]=b; dic[2]=c;//字根为a,b,c for(int i=3;i30;i++)//其余为空 { dic[i]=; } } void code(string str) { init();//初始化 char temp[2]; temp[0]=str[0];//取第一个字符 temp[1]=\0; string w=temp; int i=1; int j=3;//目前字典存储的最后一个位置 cout\n 编码为:; for(;;) { char t[2]; t[0]=str[i];//取下一字符 t[1]=\0; string k=t; if(k==) //为空,字符串结束 { cout find(w); break;//退出for循环,编码结束 } if(find(w+k)-1) { w=w+k; i++; } else { cout find(w); string wk=w+k; dic[j++]=wk; w=k; i++; } } coutendl; for(i=0;ij;i++) { coutsetw(45)i+1setw(12)dic[i]endl; } coutendl; } void decode(int c[]) { init(); int pw,cw; cw=c[0]; int j=2; cout\n 译码为:; coutdic[cw-1]; for(int i=0;in-1;i++) { pw=cw; cw=c[i+1]; if(cw=j+1) { coutdic[cw-1]; char t[2]; t[0]=dic[cw-1][0]; t[1]=\0; string k=t; j++; dic[j]=dic[pw-1]+k; } else { char t[2]; t[0]=dic[pw-1][0]; t[1]=\0; string k=t; j++; dic[j]=dic[pw-1]+k; coutdic[cw-1]; } } coutendl; for(i=0;ij+1;i++) { co

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档