信息论与编码实习报告 - 图文(2)

2020-05-04 12:13

dic[j++]=PC; P=C; i++; } }

cout<

cout<<\生成的词典为:【初始化的字典不输出】\ for(i=0;i

cout<

cout<

int main() //主程序 { cout<<\输入待编码的字符串为:\ str=\例句1

//str=\例句2 //str=\例句3 cout<

2:解码程序

//程序包含的头文件以及头文件说明

#include //数据流输入,输出 #include //字符串处理

#include //参数化输入/输出 using namespace std; int

Codenum[]={20,34,31,57,12,31,39,42,31,38,57,26,35,48,57,27,38,33,41,44,35,46,34,39,57,29,27,40,82,41,64,44,31,45,45,57,79,60,31,40,33,38,35,45,34,93,31,50,46,57,28,51,72,28,41,47,106,32,35,32,46,109,115,48,60,65,44,29,96,46,54,0};//例句1编码结果,人为在后面加了一个结束标记0 int

Codeum[]={20,34,31,57,29,27,46,61,27,40,40,41,64,45,35,64,41,40,57,46,59,65,68,42,51,57,41,32,76,78,62,44,54,0};//例句2编码结果

int Cnum[]={27,28,58,60,59,28,0}; //例句3编码结果

string dic[200]; //这是定义字典存放空间,其容量大小可以自己更改 /**********************************************************

函数名称:void Dic_init(),字典初始化 函数功能:用a~z,A~Z以及一些标点符号,初始化字典 输入参数:void

返 回 值:void ***********************************************************/ void Dic_init() {

int i,j;

for(j=0,i=0;i<26;i++) {

dic[j]='A'+i; j++; }

for(j=26,i=0;i<26;i++) {

dic[j]='a'+i; j++; }

dic[52]=\ dic[53]=\ dic[54]=\ dic[55]=\ dic[56]=\}

/*********************************************************

函数名称:De_code(int *code)

函数功能:对输入的编码数据进行LZW字典解码 输入参数:code待解码的数据

返 回 值:用Result输出译码出来的字符流 ********************************************************/ void De_code(int *code) {

string Curr; char Cu[2]; Cu[1]='\\0'; string Pre;

Dic_init(); //字典初始化 string Result;

int i=1; int j=57; int k;

cout<<\解码为:\ string Precode; while(1) {

int flag=0;

if(*code==0)break; //无码字要译,退出循环,结束

if(*code>0)

//有码字要解,就先解码出来放在Result中,然后对进行判断: {

if(*code>j)dic[j++]=Precode+Precode[0];

//这里提前构造发送端刚新建就发送过来的字典元素,针对例句3来做的。 Result=Result+dic[*code-1]; Curr=dic[*code-1]; Precode=dic[*code-1];

Cu[0]=Curr[0]; //取出当前接收到字符串的首字母给Cu来构造 code++; //指针后移 } else

cout<<\解码出错\ for(k=0;k

if(dic[k]==(Pre+Cu))flag=1;//如果在字典里面,就将标志位置1 }

if(flag==0) {

dic[j++]=Pre+Cu; Pre=Curr; } else

Pre=Curr; }

cout<

cout<<\生成的词典为:【初始化的字典不输出】\ for(i=57;i

cout<

int main() //主程序 { }

cout<<\输入待解码的编码为:\for(int i=0;Codenum[i]!=0;i++) cout<

方法二程序:

(1)子函数:

#ifndef DICTIONARY_H_INCLUDED #define DICTIONARY_H_INCLUDED

void dictionary(SLNode *head,int x1,char c1[],int num) {

char c3[5]; DataType C2; int i;

int flag=1,flag1=0,flag2=0,k=1; SLNode *p;

printf(\ printf(\ for(i=0;i

c3[0]=c1[i]; c3[1]='\\0'; p=head;

while(p->next!=NULL)

{

if(strcmp(c3,p->data.lable)) //c3与链表中的值不相等 {

p=p->next; flag1=0; }

else //c3与链表中的值相等 {

c3[flag++]=c1[i+k]; k++;

c3[flag]='\\0'; flag2=flag-1; flag1=1;

printf(\ \ if(i+k>=x1) break; continue; } }

if(flag1==0) //插入新元素 {

strcpy(C2.lable,c3); C2.code=num++;

ListInsert(head,ListLength(head),C2); flag=1; flag1=1; k=1;

memset(c3,0,5); } }

printf(\ p=head;

printf(\ while(p->next!=NULL) {

printf(\ %d -- 【%s】\\n\ p=p->next; } }

#endif // DICTIONARY_H_INCLUDED

(2)主函数:

#include #include #include #include typedef struct {

char lable[5]; int code; }DataType;

#include \

#include \

int main() {

SLNode *head,*head1; DataType C2; int x1,x2,num=0;

char c1[]=\Lempel Ziv algorithm can compress the English text by about fifty five percent.\

char c2[]=\

char s1[]=\ ListInitiate(&head); x1=strlen(c1);


信息论与编码实习报告 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016广西农村信用社招聘 - 常见面试试题及参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: