1、输入A此时,A在表中,而AB不在表中,则输出A对应的码字1,同时将AB写入表中,此时表为4 AB编码输出为1 (A已编码)第二步,输入B,B在词典中,而BB不在词典中,则输出2,将BB写入表中,此时表为5 BB编码输出为12 (AB已经编码).2.解码根缀表为定义如下变量StringP :前一步码字流pW : StringP的第一个字符StringC :当前的码字流cW : StringC的第一个字符第一步输出StringC 并StringP = StringC如:1解码为A,则StringC = A那么输出A,并令StringP = A-第二步1.解码得到StringC,并输出StringC
2、2.将StringP + cW放入词典(如果当前码字不在词典中,则将StringP + cP放入词典中)3.StringP = StringC第二步要解码为2,解码为B,则StringC=B,输出B (此时StringP = A)将StringP+cW放入表中,即将AB放入表中,此时表为四、 实验情况及分析编码 解码错误提示附:源代码#includestringiomanipusing namespace std;string dic30;int n;int find(string s)/字典中寻找,返回序号int temp=-1;for(int i=0;i30;i+)if(dici=s) t
3、emp=i+1;return temp;void init()/字典初始化dic0=a;dic1=bdic2=c/字根为a,b,cfor(int i=3;i+)/其余为空dici=void code(string str)init();/初始化char temp2;temp0=str0;/取第一个字符temp1=0string w=temp;int i=1;int j=3;/目前字典存储的最后一个位置cout-1)w=w+k;i+;elsestring wk=w+k;dicj+=wk;w=k;endl;for(i=0;j;setw(45)i+1setw(12)dicivoid decode(int c)int pw,cw;cw=c0;int j=2;n 译码为:diccw-1;n-1;pw=cw;cw=ci+1;if(cwcha;if(cha=an输入要编码的字符串(由a、b、c组成):str;code(str);bint c30;n消息序列长度是:n;n消息码字依次是:ci;decode(c);else cout输入错误!