大致還算可以了。如果我把它寫得再好,那就可以拿出去買錢了。
假如妳編譯後生成a.out 這個可執行文件。
運行時候: a.out 1.c 2.c
如果顯示結果不超過20%, 那麽可以認為兩者不是抄襲的,如果結果顯示大於50%,那麽兩者相似的程度就很大了,可以認為是抄襲的。
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
int main(int argc,char* argv[]){
int i,j;
int fd1 ,fd2;
int file1_len ,file2_len,sumbase1,sumbase2,sumbase = 0;
int yes = 0;
char filec;
char file1_buf[9000] = {0};
char file2_buf[9000] = {0};
if( (fd1 = open(argv[1],O_RDONLY)) < 0 ){
printf("file %s open error!\n",argv[1]);
exit(-1);
}
if( (fd2 = open(argv[2],O_RDONLY)) < 0 ){
printf("file %s open error!\n",argv[2]);
exit(-1);
}
file1_len = lseek(fd1,0,SEEK_END);
lseek(fd1,0,SEEK_SET);
file2_len = lseek(fd2,0,SEEK_END);
lseek(fd2,0,SEEK_SET);
if( read(fd1,file1_buf,file1_len) < 0 ){
printf("read error!\n");
exit(-1);
}
if( read(fd2,file2_buf,file2_len) < 0 ){
printf("read error!\n");
exit(-1);
}
//去掉符號
for( i = 0,j = 0 ; i < file1_len ; i++){
if( file1_buf[i] >= '0' && file1_buf[i] <= '9' || file1_buf[i] >= 'A' && file1_buf[i] <= 'z')
file1_buf[j++] = file1_buf[i];
}
sumbase1 = j;
for( i = 0,j = 0 ; i < file2_len ; i++){
if( file2_buf[i] >= '0' && file2_buf[i] <= '9' || file2_buf[i] >= 'A' && file2_buf[i] <= 'z')
file2_buf[j++] = file2_buf[i];
}
sumbase2 = j;
sumbase = sumbase1 <= sumbase2 ? sumbase1 : sumbase2;
for( i = 0 ,j = 0; i < sumbase ; i++,j++){
if( file1_buf[i] == file2_buf[j] ){
yes++;
}else if(file1_buf[i] == file2_buf[j+3] && file1_buf[i+1] == file2_buf[j+4]){
j +=3;
}else if(file1_buf[i] == file2_buf[j+4] && file1_buf[i+1] == file2_buf[j+5]){
j +=4;
}else if(file1_buf[i] == file2_buf[j+5] && file1_buf[i+1] == file2_buf[j+6]){
j +=5;
}else if(file1_buf[i] == file2_buf[j+6] && file1_buf[i+1] == file2_buf[j+7]){
j += 6;
}else if(file1_buf[i] == file2_buf[j+8] && file1_buf[i+1] == file2_buf[j+9]){
j += 8;
}else if(file1_buf[i] == file2_buf[j+10] && file1_buf[i+1] == file2_buf[j+11]){
j += 10;
}else if(file1_buf[i] == file2_buf[j+11] && file1_buf[i+1] == file2_buf[j+12]){
j +=11;
}else if(file1_buf[i] == file2_buf[j+12] && file1_buf[i+1] == file2_buf[j+13]){
j +=12;
}else if(file1_buf[i] == file2_buf[j+20] && file1_buf[i+1] == file2_buf[j+21]){
j +=20;
}else if(file1_buf[i] == file2_buf[i+21] && file1_buf[i+1] == file2_buf[i+22]){
j +=21;
}else if(file1_buf[i] == file2_buf[j+25] && file1_buf[i+1] == file2_buf[j+26]){
j +=25;
}else if(file1_buf[i] == file2_buf[i+26] && file1_buf[i+1] == file2_buf[i+27]){
j +=26;
}
}
printf("相似的比例大約是:%0.3f%% \n",((yes * 1.0 / sumbase)*100));
return 0;
}