思路:首先,对要进行比较的所有代码段进行词法分析,并转化为特定的标记(token)串,自己制定一个转换规则。接着,通过两两比较标记(token)串来确定代码之间的相似性,并由此确定代码之间抄袭的程度,。,基于算法RKR-GST(running-karp-rabingreedy-string-tiling)算法思想,循环求取两个标记串中未被匹配部分的最大公共子串,将其用空格代替,并根据如下公式求出两个token串A,B的相似度:()过程论述流程图首先要对整个设计做一个整体规划,即设计一个流程图,。#include<>#include<>#include<>#include<>#include<>#include<>#include<>#defineN10000#defineM10000#defineMAXSTRLEN10000 //定义最大串长typedefintstatus;typedefunsignedcharSString[MAXSTRLEN+1]; //串的定长顺序存储表示SStringa[3]={"int","long","short"};SStringb[2]={"float","double"};SStringc[15]={"&&","||","++","--","+","-","*","/","=",">=","<=","==","!=",">","<"};SStringd[12]={"[","]","{","}","(",")",",",";","'","#",";","."};SStringe[29]={"auto","break","case","char","const","continue","default","do","else","enum", "extern","for","goto","if","main","printf","register","return","signed","sizeof", "static","struct","switch","typedef","union","unsigned","void","while","volatile"};HANDLEhOut;DWORDwritten;voidShadowWindowLine(char*str);chartype(char*str);voidtoken(charname[],charlist[],chartoken[],FILE*table);voidsimple(intMinMatchLen,FILE*fp1,FILE*fp2);statusreplace(SStrings,intpos,intlen,intLs);intcopy(floatn);voidShadowWindowLine(char*str){SMALL_RECTrc;CONSOLE_SCREEN_BUFFER_INFObInfo;//窗口缓冲区信息WORDatt0,att1,attBack;inti,chNum=strlen(str);GetConsoleScreenBufferInfo(hOut,&bInfo);//获取窗口缓冲区信息//=(-chNum)/2-2;=8;//-2,但是如果您的DOS屏幕有垂直滚动条的话,还需要把滚动条下拉才能看到,=+chNum+4;=+4;att0=BACKGROUND_RED|BACKGROUND_BLUE;//阴影属性att1=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY;//文本属性attBack=BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY;//背景属性//设置阴影然后填充COORDposShadow={+1,+1},posText={,},posBack={0,0};for(i=0;i<25;i++){Fill
数据结构代码相似度检测 来自淘豆网www.taodocs.com转载请标明出处.