下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用哈希表判别两个源程序的相似性以下是应用源程序代码:将以下程序下载后,用C+6.0打开,同时在根目录下新建三个文本文档(.txt格式)。命名分别为keyword,program1,program2;即可运行出结果。 #include#include#include#includetypedef struct nodechar c10; int len; /记录关键字的长度 struct node *q; keynode; /关键字结点,认为关键字的长度不超过10个字符 typedef struct tablechar w; keynode *p;hash; /定义哈希表类型 void init
2、_value(hash key,char stack ,int information1, int information2 ) /初始化函数 int i; for(i=0;i100;i+) keyi.p=NULL; for(i=0;i10;i+) stacki=0; for(i=0;i20;i+) information1i=0; information2i=0; void create_hash(hash key) /创建哈希表函数 int i,num=0,k; /num表示关键字的数量,k表示单个关键字的长度 char ch; FILE *fp; keynode *p1; /p1为指向关
3、键字结点类型的指针 hash p2; /p2为指向hash类型的指针 for(i=0;i26;i+) keyi.w=a+i; /哈希表每个结点的字符域存储26个字母 if (fp=fopen(keyword.txt,r)=NULL) /打开写有关键字的文件,文件存储在C盘上 printf(没有打开文件n); exit(0); while(num100) /假设关键字的个数少于100 k=0; while(k10) /假设关键字的长度少于10 ch=fgetc(fp); /从文件中读一个字符,遇空格则退出 if(ch=32) break; if(k=0) p1=(keynode*)malloc(
4、sizeof(struct node); /若不是空格,且是关键字的第一个字母, 则开辟关键字结点空间 (*p1).ck=ch; k+; i=0; while(iq=NULL; p1-len=k; num+; if(feof(fp) /如果该文件已读完,则关闭文件 fclose(fp); break; void get_compare1(char stack,hash key,int information1) /从给出的一个源程序中读关键字,将该关键字存入字符数组 FILE *fp; char ch; int i,j; keynode *q1; fp=fopen(program1.txt,r
5、); /打开存储在C盘的源程序 do i=0; while(i10) /读取时认为关键字的长度小于10 ch=fgetc(fp); /从文件中读取时一个字符一个字符来读,遇到空格则退出 if(ch=32) break; stacki=ch; i+; /读取下一个字符 i=0; while(ic)!=0) /若待比较的关键字与当前指向的关键字不同,则指向下一个关键字 q1=q1-q; else /若待比较的关键字与当前指向的关键字相同,则对应位置的频数加1 j=(*q1).len; information1j+; break; break; while(ch!=EOF); /若该源程序已读完,则
6、关闭文件 fclose(fp); void get_compare2(char stack,hash key,int information2) /从给出的另一个源程序中读关键字,将该关键字存入字符数组FILE *fp; char ch; int i,j; keynode *q1; fp=fopen(program2.txt,r); do i=0; while(i10) ch=fgetc(fp); if(ch=32) break; stacki=ch; i+; i=0; while(iq) if(strcmp(stack,q1-c)!=0) q1=q1-q; else /若待比较的关键字与当期
7、指向的关键字相同,则对应位置的频数加1 j=(*q1).len; information2j+; break; break; while(ch!=EOF); fclose(fp);float similarity(int information1,int information2) /利用广义余弦法计算这两个程序的相似度 int k=0,m=0,n=0,p=0,q=0; float r,l,i; while (k100) n+=information1k*information2m; p+=information1k*information1k; q+=information2m*inform
8、ation2m; k+; m+; r= sqrt (p); l= sqrt (q); i= n/(l*r); return(i); / i即为两源程序的相似度 int main(void) float i; hash key100; /建立一个hash结构的数组空间,该数组中存放26个字母 char stack10; /建立一个字符数组空间,其中存放待比较源程序的关键字 int information120,information220; printf(姓名:* t学号:*nn实验二:两个源程序的相似性判别nn); printf(*nn); init_value(key,stack,information1,information2); /初始化数组 printf(创建哈希表:n); /create_hash(key); /创建哈希表 printf(比较哈希表1n); get_compare1(stack,key,information1); /比较第一个源程序 printf(比较哈希表2n); get_compare2(stack,key,information2);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年文化旅游资源整合发展方案
- 新能源商用车电气设备检修课件 项目三-任务2空调系统取暖故障检修
- 住宅协议书15篇
- 关于平面设计的宣传语
- 2026年食品药品六月安全检查方案
- 2026年企业社会责任责任追究方案
- 高三冲刺生物光合作用呼吸作用精讲|光合呼吸 物质能量
- 《口语卫生习惯训练|个人卫生环境卫生保持》
- 23.1 平均数与加权平均数(能力提升)(原卷版)
- 七年级语文上册文言文课|实词虚词
- 2026年安徽省合肥社区工作者考试题库含答案
- 2026-2030中国蒸汽眼罩行业深度调研及投资前景预测研究报告
- (2026版)国开电大法学本科知识产权法历年期末考试总题及答案
- 银行不良资产评估定价管理办法模版
- 门诊病案管理工作制度
- 鲜风生活生鲜即时配送
- 丁腈橡胶失效分析案例
- 曲靖2025年云南曲靖市事业单位定向招聘驻曲部队未就业随军家属笔试历年参考题库附带答案详解
- 从输血到患者血液管理《临床用血技术规范(2025版)》解读
- 国家基层糖尿病防治管理指南(2025)解读
- 2025年新高一英语暑假专项提升(人教版)动词时空密码速通(时态语态与主谓一致考点解析)
评论
0/150
提交评论