用哈希表判别两个源程序的相似性.doc

用哈希表判别两个源程序的相似性.doc

ID:54945961

大小:23.00 KB

页数:5页

时间:2020-04-24

用哈希表判别两个源程序的相似性.doc_第1页
用哈希表判别两个源程序的相似性.doc_第2页
用哈希表判别两个源程序的相似性.doc_第3页
用哈希表判别两个源程序的相似性.doc_第4页
用哈希表判别两个源程序的相似性.doc_第5页
资源描述:

《用哈希表判别两个源程序的相似性.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用哈希表判别两个源程序的相似性以下是应用源程序代码:将以下程序下载后,用C++6.0打开,同时在根目录下新建三个文本文档(.txt格式)。命名分别为keyword,program1,program2;即可运行出结果。#include#include#include#includetypedefstructnode{charc[10];intlen;//记录关键字的长度structnode*q;}keynode;//关键字结点,认为关键字的长度不超

2、过10个字符typedefstructtable{charw;keynode*p;}hash;//定义哈希表类型voidinit_value(hashkey[],charstack[],intinformation1[],intinformation2[])//初始化函数{inti;for(i=0;i<100;i++)key[i].p=NULL;for(i=0;i<10;i++)stack[i]='';for(i=0;i<20;i++){information1[i]=0;information2[i]=0;}}v

3、oidcreate_hash(hashkey[])//创建哈希表函数{inti,num=0,k;//num表示关键字的数量,k表示单个关键字的长度charch;FILE*fp;keynode*p1;//p1为指向关键字结点类型的指针hashp2;//p2为指向hash类型的指针for(i=0;i<26;i++)key[i].w='a'+i;//哈希表每个结点的字符域存储26个字母if((fp=fopen("keyword.txt","r"))==NULL)//打开写有关键字的文件,文件存储在C盘上{printf("没有

4、打开文件");exit(0);}while(num<100)//假设关键字的个数少于100{k=0;while(k<10)//假设关键字的长度少于10{ch=fgetc(fp);//从文件中读一个字符,遇空格则退出if(ch==32)break;if(k==0)p1=(keynode*)malloc(sizeof(structnode));//若不是空格,且是关键字的第一个字母,则开辟关键字结点空间(*p1).c[k]=ch;k++;}i=0;while(i<26)//将一个关键字读入关键字结点后,将该结点链接到哈

5、希表上{if((*p1).c[0]!=key[i].w)i++;else{key[i].p=p1;p1->q=NULL;p1->len=k;}}num++;if(feof(fp))//如果该文件已读完,则关闭文件{fclose(fp);break;}}}voidget_compare1(charstack[],hashkey[],intinformation1[])//从给出的一个源程序中读关键字,将该关键字存入字符数组{FILE*fp;charch;inti,j;keynode*q1;fp=fopen("progra

6、m1.txt","r");//打开存储在C盘的源程序do{i=0;while(i<10)//读取时认为关键字的长度小于10{ch=fgetc(fp);//从文件中读取时一个字符一个字符来读,遇到空格则退出if(ch==32)break;stack[i]=ch;i++;//读取下一个字符}i=0;while(i<26)//将该关键字与哈希表中的关键字比较{if(stack[0]!=key[i].w)i++;else{q1=key[i].p;while(q1){if(strcmp(stack,q1->c)!=0)//若待比

7、较的关键字与当前指向的关键字不同,则指向下一个关键字q1=q1->q;else//若待比较的关键字与当前指向的关键字相同,则对应位置的频数加1{j=(*q1).len;information1[j]++;break;}}break;}}}while(ch!=EOF);//若该源程序已读完,则关闭文件fclose(fp);}voidget_compare2(charstack[],hashkey[],intinformation2[])//从给出的另一个源程序中读关键字,将该关键字存入字符数组{FILE*fp;charc

8、h;inti,j;keynode*q1;fp=fopen("program2.txt","r");do{i=0;while(i<10){ch=fgetc(fp);if(ch==32)break;stack[i]=ch;i++;}i=0;while(i<26){if(stack[0]!=key[i].w)i++;else{q1=ke

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。