资源描述:
《数据结构代码相似度检测》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、思路:首先,对要进行比较的所有代码段进行词法分析,并转化为特定的标记(token)串,自己制定一个转换规则。接着,通过两两比较标记(token)串来确定代码之间的相似性,并由此确定代码之间抄袭的程度,过程如图2.1所示。图2.1源代码复制检测过程示意图将这两个代码分别转换为token串后,基于算法RKR-GST(running-karp-rabingreedy-string-tiling)算法思想,循环求取两个标记串中未被匹配部分的最大公共子串,将其用空格代替,并根据如下公式求出两个token串A,B的相似度:hiihrih-)2x1/aklikenL41+BI(2.3)lrh(i,jbi
2、gtfi)Cniallies4*ngtli过程论述流程首先耍对整个设计做一个整体规划,即设计一个流程图,如图3.1。思路:首先,对要进行比较的所有代码段进行词法分析,并转化为特定的标记(token)串,自己制定一个转换规则。接着,通过两两比较标记(token)串来确定代码之间的相似性,并由此确定代码之间抄袭的程度,过程如图2.1所示。图2.1源代码复制检测过程示意图将这两个代码分别转换为token串后,基于算法RKR-GST(running-karp-rabingreedy-string-tiling)算法思想,循环求取两个标记串中未被匹配部分的最大公共子串,将其用空格代替,并根据如下公式求
3、出两个token串A,B的相似度:hiihrih-)2x1/aklikenL41+BI(2.3)lrh(i,jbigtfi)Cniallies4*ngtli过程论述流程首先耍对整个设计做一个整体规划,即设计一个流程图,如图3.1。x主程序main显示攻迎界面::调用token函数生成token串1调用simple函数,求token串的相似度n图3.1程序流程图程序清单^include#includc^include^include^include^include#includc
4、〈windows.h>#dcfineN10000#dcfincM10000typcdcfintstatus;typcdcfunsignedcharSString[MAXSTRLEN+l];//串的定长顺序存储表示SStringa[3]={"int"long","short"};SStringb[2]={’’float〃,"double"};SStringc[15]={〃&&",〃丨
5、〃,〃++〃,〃一〃SStringd[12]={T,T,TSStringeL29」={auto,break,case,char,const,continue,default,do,else,enum,exter
6、n,for,goto,if,main,printt,register,return,signe,sizeof,static,struct,switch,typcdcT,union,unsigned,void,while〃,"volatile"};HANDLEhOut;DWORDwritten;voidShadowWindowLine(char氺str);chartype(char*str);voidtoken(charname[],charlist[],chartoken[],FILEstable);voidsimple(intMinMatchLen,FILE*fpl,FILE*fp2);s
7、tatusreplace(SStrings,intpos,intlen,intLs);intcopy(floatn);voidShadowWindowLine(char氺str){SMALLRECTrc;CONSOLESCREEN,BUFFERINFOblnfo;//窗口缓冲区信息WORDattO,attl,attBack;inti,chNum=strlen(str);GctConsolcScrccnBuffcrlnfo(hOut,&blnfo);//获取窗口缓冲区信息//计算显示窗口大小和位置rc.Left=(blnfo.dwSize.X-chNum)/2-2;rc.Top=8;//原代码
8、段中此处为blnfo.dwSize.Y/2-2,但是如果您的DOS屏幕有垂直滚动条的话,还需要把滚动条下拉才能看到,为了方便就把它改为10rc.Right=rc.Left+chNum+4;rc.Bottom=rc.Top+4;attO=BACKGROUNDRED
9、BACKGROUNDBLUE;//阴影属性attl=FOREGROUNDRED
10、FOREGROUNDGREEN
11、FOREGROUNDBLUEFORE