• 大小: 1.11MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-09
  • 语言: C/C++
  • 标签:

资源简介

用比较简单的方法实现代码相似度的计算!

资源截图

代码片段和文件信息

/*
对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,
并最终按定量的计算结果,得出两份程序的相似性。
基本要求:建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度 得到两个
向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。
例如:  
关键字            void   int   for   char  if  else  while  do   break  class
程序1关键字频度    4     3      0     4     3    0     7     0     0      2
程序2关键字频度    4     2      0     5     4    0     5     2     0      1
X1=[4304307002]
X2=[4205405201]
设s是向量X1和X2的相对距离,s=sqrt(∑(xi1-xi2)^2),当X1=X2时,s=0 反映出可能是同一个程序;
s值越大,则两个程序的差别可能也越大。
测试数据: 选择若干组编译和运行都无误的C++程序,程序之间有相近的和差别大的,用上述方法求s 
对比两个程序的相似性。*/
#include
#include
#include
#include
#include
#define M 100000
using namespace std;
int hash1[20]hash2[20];
int fileProcessed(char sourceData[]int count);
void calcunum(char data[]int nint num);
double possibality(int hash1[]int hash2[]);
int main()
{
int i;
    int count1=1;//12用于判断第一个文件或者第二个文件
int count2=2;
//定义两个字符数组,用于存放经过处理后的文件的字符
char sourceData1[M];//第一个字符数组
    char sourceData2[M];//第二个字符数组
count1 = fileProcessed(sourceData1count1);  //数组赋值并返回字符个数
count2 = fileProcessed(sourceData2count2);
memset(hash10sizeof(hash1));
memset(hash20sizeof(hash2));
calcunum(sourceData1count11);
calcunum(sourceData2count22);
cout<<“break  char   class  do     else   for    if     int    void   while“< for(i=0;i<10;i++)
printf(“%-7d“hash1[i]);
cout< for(i=0;i<10;i++)
printf(“%-7d“hash2[i]);
cout< cout<<“相似度为: “< return 0;
}
int fileProcessed(char sourceData[]int count)
{
if(count == 1)
{//处理第一个文件
int i = 0;
char chfirst[10];
cout<<“第一个文件的文件名:“< cin>>first;
ifstream infile(firstios::in);
ofstream outfile(“firstProcessed.txt“ios::out);
if(!infile)
{
cerr<<“open first error“< }
if(!outfile)
{
cerr<<“open firstProcessed error“< }
//处理文件即将()[]{}替换为空格保存在firstProcessed中
while(infile.get(ch))
{
if(ch == ‘(‘ || ch == ‘)‘ || ch == ‘{‘ || ch == ‘}‘ || ch == ‘[‘ || ch == ‘]‘)
{
ch = ‘ ‘;
}
if(ch == ‘‘ || ch == ‘<‘ || ch == ‘>‘||ch==‘;‘)
{
ch = ‘ ‘;
}
outfile.put(ch);
}
infile.close(); outfile.close();
ifstream infile2(“firstProcessed.txt“ios::in);//打开firstProcessed需要比较的第一个文件
if(!infile2)
{
cerr<<“open firstProcessed error!“< }
       //把文件存储在sourceData数组里并进行进一步处理把多个空格合并为一个空格以减少空间开销
while(infile2.get(ch))
{
if(ch == ‘ ‘ && sourceData[i - 1] == ‘ ‘)
{
continue;//取消连续的空格
}
else if(ch == ‘\n‘ && sourceData[i - 1] == ‘\n‘)
{
continue;//取消连续的空行
}
else
{
sourceData[i++]= ch;
}
}
count = i; infile2.close();
return count;
}
else
{
int i = 0;
char chsecond[10];
cout<<“第二个文件的文件名:“< cin>>second;
ifstream infile(secondios::in);
ofstream outfile(“secondProcessed.txt“ios::out)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-07-02 14:10  c++程序实现c++代码相似度计算\
     文件        1621  2016-07-02 10:59  c++程序实现c++代码相似度计算\1.txt
     文件        1639  2016-07-02 10:59  c++程序实现c++代码相似度计算\2.txt
     文件        1848  2009-12-30 15:29  c++程序实现c++代码相似度计算\3.txt
     目录           0  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\
     文件      581715  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\hua.exe
     文件      829972  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\hua.ilk
     文件      297946  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\hua.obj
     文件     2148984  2016-07-02 10:59  c++程序实现c++代码相似度计算\Debug\hua.pch
     文件     1139712  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\hua.pdb
     文件       74752  2016-07-02 12:10  c++程序实现c++代码相似度计算\Debug\vc60.idb
     文件      110592  2016-07-02 12:07  c++程序实现c++代码相似度计算\Debug\vc60.pdb
     文件        1621  2016-07-02 12:10  c++程序实现c++代码相似度计算\firstProcessed.txt
     文件        5491  2016-07-02 12:07  c++程序实现c++代码相似度计算\hua.cpp
     文件        3365  2016-07-02 12:10  c++程序实现c++代码相似度计算\hua.dsp
     文件         531  2016-07-02 14:10  c++程序实现c++代码相似度计算\hua.dsw
     文件       41984  2016-07-02 14:10  c++程序实现c++代码相似度计算\hua.ncb
     文件       48640  2016-07-02 14:10  c++程序实现c++代码相似度计算\hua.opt
     文件         240  2016-07-02 12:10  c++程序实现c++代码相似度计算\hua.plg
     文件        1848  2016-07-02 12:10  c++程序实现c++代码相似度计算\secondProcessed.txt

评论

共有 条评论

相关资源