欢迎来到天天文库
浏览记录
ID:47535152
大小:15.18 KB
页数:3页
时间:2020-01-13
《源代码相似度比较》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#include#include#defineN32//关键字个数#definesize256#definemaxlen9#definehashlen41//哈希表长度#defineSmax0.9//相似度s的阈值#defineDmin2structhashtable{char*hash1;//指向关键字的指针intcount;}hashtt[hashlen];usingnamespacestd;voidHashfunc
2、(charstr[]);//将关键字根据哈希函数放入哈希表中的指定位置intHashfind(char*words);//在哈希表中找是否该words为关键字,并统计频度intisletter(charch);//判断是否为字母floatMol(int*x);//取模函数intDot(int*x1,int*x2);//点积函数floatD(int*x1,int*x2);//求距离D的函数floatS(int*x1,int*x2);//求相似度S的函数intreadc(char*filename);//读取源程序文件中的单词
3、intgetkey(char*str,intlen);//获取该单词的keyvoidresethash(intn);//重置哈希表voidcopycount(intx[],intn);//将频道拷贝到数组里if((ch>='a'&&ch<='z')
4、
5、(ch>='A'&&ch<='Z'))return1;return0;}intreadc(char*filename){//读取源程序文件中的单词FILE*fp1=NULL;charwords[maxlen],ch;inti;if((fp1=fopen(filename,"r
6、"))==NULL){cout<<"cannotcreatfile!";exit(0);}while(!feof(fp1))//结束返回1{i=0;ch=fgetc(fp1);//一个字符一个字符的读while(isletter(ch)==0&&feof(fp1)==0){ch=fgetc(fp1);}while(isletter(ch)==1&&feof(fp1)==0){if(i==maxlen){while(isletter(ch)==1&&feof(fp1)==0){ch=fgetc(fp1);}i=0;bre
7、ak;}//超过最大关键字长度将会跳过当前识别区域,读取下一个单词else{words[i++]=ch;ch=fgetc(fp1);}}words[i]=' ';Hashfind(words);//将得到的该单词调入Hashfind函数,来判断是否为关键字,并统计频度}fclose(fp1);return0;}floatMol(int*x)//取模函数{inti=0,sum=0;for(i=0;i8、Dot(int*x1,int*x2){//点积函数inti=0,sum=0;for(i=0;i9、x1,int*x2){floatxs=0,xd=0;xs=S(x1,x2);cout<<"相似度xs="<Smax)//先判断S,若S大于阈值再计算几何距离{xd=D(x1,x2);cout<<"几何距离xd="<10、urn;}
8、Dot(int*x1,int*x2){//点积函数inti=0,sum=0;for(i=0;i9、x1,int*x2){floatxs=0,xd=0;xs=S(x1,x2);cout<<"相似度xs="<Smax)//先判断S,若S大于阈值再计算几何距离{xd=D(x1,x2);cout<<"几何距离xd="<10、urn;}
9、x1,int*x2){floatxs=0,xd=0;xs=S(x1,x2);cout<<"相似度xs="<Smax)//先判断S,若S大于阈值再计算几何距离{xd=D(x1,x2);cout<<"几何距离xd="<10、urn;}
10、urn;}
此文档下载收益归作者所有