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

上传人:b****9 文档编号:154316 上传时间:2022-10-04 格式:DOC 页数:6 大小:60.50KB
下载 相关 举报
LZW编码编程实现(C++版).doc_第1页
第1页 / 共6页
LZW编码编程实现(C++版).doc_第2页
第2页 / 共6页
LZW编码编程实现(C++版).doc_第3页
第3页 / 共6页
LZW编码编程实现(C++版).doc_第4页
第4页 / 共6页
LZW编码编程实现(C++版).doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

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

《LZW编码编程实现(C++版).doc》由会员分享,可在线阅读,更多相关《LZW编码编程实现(C++版).doc(6页珍藏版)》请在冰豆网上搜索。

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

LZW编码的编程和实现

一、实验目的

编写源程序,实现LZW的编码和解码

二、实验要求

1.编码输入若干字母(如abbababac),输出相应的编码

2.解码输入若干数字(如122473),输出相应的字母

三、编程思想

1.编码

根缀表已知

1A

2B

3C

编码

分析字符串流,从词典中寻找最长匹配串,即字符串P在词典中,而字符串P+后一个字符C不在词典中

此时,输出P对应的码字,将P+C放入词典中。

如第一步:

输入A

此时,A在表中,而AB不在表中,则输出A对应的码字1,同时将AB写入表中,此时表为

1A

2B

3C

4AB

编码输出为1(A已编码)

第二步,输入B,B在词典中,而BB不在词典中,则输出2,将BB写入表中,此时表为

1A

2B

3C

4AB

5BB

编码输出为12(AB已经编码)

....

2.解码

根缀表为

1A

2B

3C

定义如下变量

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放入表中,此时表为

1A

2B

3C

4AB

四、实验情况及分析

编码解码

错误提示

附:

源代码

#include

#include

#include

usingnamespacestd;

stringdic[30];

intn;

intfind(strings)//字典中寻找,返回序号

{

inttemp=-1;

for(inti=0;i<30;i++)

{

if(dic[i]==s)temp=i+1;

}

returntemp;

}

voidinit()//字典初始化

{

dic[0]="a";

dic[1]="b";

dic[2]="c";//字根为a,b,c

for(inti=3;i<30;i++)//其余为空

{

dic[i]="";

}

}

voidcode(stringstr)

{

init();//初始化

chartemp[2];

temp[0]=str[0];//取第一个字符

temp[1]='\0';

stringw=temp;

inti=1;

intj=3;//目前字典存储的最后一个位置

cout<<"\n编码为:

";

for(;;)

{

chart[2];

t[0]=str[i];//取下一字符

t[1]='\0';

stringk=t;

if(k=="")//为空,字符串结束

{

cout<<""<

break;//退出for循环,编码结束

}

if(find(w+k)>-1)

{

w=w+k;

i++;

}

else

{

cout<<""<

stringwk=w+k;

dic[j++]=wk;

w=k;

i++;

}

}

cout<

for(i=0;i

{

cout<

}

cout<

}

voiddecode(intc[])

{

init();

intpw,cw;

cw=c[0];

intj=2;

cout<<"\n译码为:

";

cout<

for(inti=0;i

{

pw=cw;

cw=c[i+1];

if(cw<=j+1)

{

cout<

chart[2];

t[0]=dic[cw-1][0];

t[1]='\0';

stringk=t;

j++;

dic[j]=dic[pw-1]+k;

}

else

{

chart[2];

t[0]=dic[pw-1][0];

t[1]='\0';

stringk=t;

j++;

dic[j]=dic[pw-1]+k;

cout<

}

}

cout<

for(i=0;i

{

cout<

}

cout<

}

voidmain()

{

stringstr;

while

(1)

{

cout<<"\n\n\ta.编码\tb.译码\n\n";

cout<<"请选择:

";

charcha;

cin>>cha;

if(cha=='a')

{

cout<<"\n输入要编码的字符串(由a、b、c组成):

";

cin>>str;

code(str);

}

if(cha=='b')

{

intc[30];

cout<<"\n消息序列长度是:

";

cin>>n;

cout<<"\n消息码字依次是:

";

for(inti=0;i

{

cin>>c[i];

}

decode(c);

}

else{cout<<"输入错误!

"<

break;}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1