检验文件相似度 源代码.docx
- 文档编号:22983477
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:10
- 大小:16.27KB
检验文件相似度 源代码.docx
《检验文件相似度 源代码.docx》由会员分享,可在线阅读,更多相关《检验文件相似度 源代码.docx(10页珍藏版)》请在冰豆网上搜索。
检验文件相似度源代码
//xiangsidu.cpp:
Definestheentrypointfortheconsoleapplication.
//
//#include"stdafx.h"
//#include"stdlib.h"
#include
#include
voidformat();//没有参数或参数为“/?
”时的帮助提示
voidxiangsidu();//实现对两个目标文件统计相似度的功能
intread1(char*txt);//从命令行参数输入的文件指针读入文件1的内容
intread2(char*pho);//从命令行参数输入的文件指针读入文件2的内容
voidsave1();//将文章1的统计结果保存到3.txt文本文件中
voidsave2();//将文章2的统计结果保存到4.txt文本文件中
chararticle1[50000];
chararticle2[50000];
charword1[500][20];
charword2[500][20];
intnumber2,number1;
structword
{
chardanci[20];
intnum;
floatbili;
}fword1[100],fword2[100];
/******************************主函数************************************/
voidmain(intargc,char*argv[])
{
intflag1,flag2;
if(argc==1)format();
elseif((argc==2)&&strcmp(argv[1],"/?
")==0)format();
elseif(argc==3)
{
flag1=read1(argv[1]);
flag2=read2(argv[2]);
if(flag1==0||flag2==0)
printf("读取信息失败!
\n");
else
{
xiangsidu();save1();save2();
}
}
elseprintf("\n该程序应该携带2个参数!
\n");
}
voidformat()//没有参数或参数为“/?
”时的帮助提示
{
printf("\n命令格式为:
xingsiduSourceFileTargetFile\n\n");
printf("SourceFile指文章1的文本文件\n");
printf("TargetFile指文章2的文本文件\n");
}
/***************从命令行参数输入的文件指针读入文件1的内容*****************/
intread1(char*txt)
{
FILE*ftxt;
inti,n;
if((ftxt=fopen(txt,"rb"))==NULL)//txt即指向的文本文件1的指针
{
printf("%s文件无法打开!
\n");
return0;
}
printf("\n\n\t\t\t读取文件...\n\n");
for(i=0;!
feof(ftxt);i++)//文件内部指针未到文件尾,执行循环体
article1[i]=fgetc(ftxt);//从ftxt所指文件中读取一个字节信息
n=i-1;
fclose(ftxt);
article1[i]='\n';
printf("\n文章1内容如下:
\n\n");
for(i=0;i { putchar(article1[i]); } return1; } /******************从命令行参数输入的文件指针读入文件2的内容*****************/ intread2(char*pho) { FILE*fpho; inti,n; if((fpho=fopen(pho,"rb"))==NULL)//pho即指向的文本文件2的指针 { printf("%s文件无法打开! \n"); return0; } printf("\n\n\t\t\t读取文件...\n\n"); for(i=0;! feof(fpho);i++)//文件内部指针未到文件尾,执行循环体 article2[i]=fgetc(fpho);//从fpho所指文件中读取一个字节信息 n=i-1; fclose(fpho); article2[i]='\n'; printf("\n文章2内容如下: \n\n"); for(i=0;i { putchar(article2[i]); } return1; } /**********************对文章1和文章2的相同单词进行统计****************************/ voidxiangsidu() { inti=0,j=0,k=0,m=0,flag=1; for(i=0;article1[i]! ='\0';i++)//二维数组word1[]记录文章1中的所有单词 { if(article1[i]>=65&&article1[i]<=90)article1[i]=article1[i]+32; if(article1[i]==39||article1[i]>=97&&article1[i]<=122) { word1[j][k]=article1[i]; k++; } elseif(article1[i]==''||article1[i]==','||article1[i]=='.') { word1[j][k]='\0'; j++; k=0; } } number1=j;//文章1中所有的单词个数number1 j=0; for(i=0;article2[i]! ='\0';i++)//二维数组word2[]记录文章2中的所有单词 { if(article2[i]>=65&&article2[i]<=90)article2[i]=article2[i]+32; if(article2[i]==39||article2[i]>=97&&article2[i]<=122) { word2[j][k]=article2[i]; k++; } elseif(article2[i]==''||article2[i]==','||article2[i]=='.') { word2[j][k]='\0'; j++; k=0; } } number2=j;//文章2中所有的单词个数number2 k=0; strcpy(fword1[0].danci,"! "); strcpy(fword2[0].danci,"! "); for(i=0;i { flag=1; for(j=0;j { if(strcmp(word1[i],word2[j])==0) { for(m=0;strcmp(fword1[m].danci,"! ")! =0;m++)//检测相同的单词在前面是否已经统计过 { if(strcmp(word1[i],fword1[m].danci)==0)flag=0; } if(flag) { strcpy(fword1[k].danci,word1[i]);//将相同的单词分别存入结构体数组fword1[]和fword2[]中 strcpy(fword2[k].danci,word2[j]); k++;strcpy(fword1[k].danci,"! ");strcpy(fword2[k].danci,"! "); break; } } } } for(i=0;strcmp(fword1[i].danci,"! ")! =0;i++)//对文章1中相同单词个数的统计 { fword1[i].num=0; for(j=0;j { if(strcmp(fword1[i].danci,word1[j])==0)fword1[i].num++; } fword1[i].bili=(float)fword1[i].num/(number1+1)*100;//相同单词在文章1中占的比例 } for(i=0;strcmp(fword2[i].danci,"! ")! =0;i++)//对文章2中相同单词个数的统计 { fword2[i].num=0; for(j=0;j { if(strcmp(fword2[i].danci,word2[j])==0)fword2[i].num++; } fword2[i].bili=(float)fword2[i].num/(number2+1)*100;//相同单词在文章2中占的比例 } printf("文章1单词总数: %d\n",number1); printf("文章2单词总数: %d\n",number2); printf("\n\n\n\t\t文章1\t\t文章2\n"); printf("\n相同单词\t个数\t百分比\t\t个数\t百分比\n"); for(i=0;strcmp(fword1[i].danci,"! ")! =0;i++) { printf("%5s\t%d\t%5.2f%%\t%d\t%5.2f%%\n",fword1[i].danci,fword1[i].num,fword1[i].bili,fword2[i].num,fword2[i].bili); } } /******************将文章1的统计结果保存到3.txt文本文件中********************/ voidsave1() { FILE*fp; inti,a=1; if((fp=fopen("3.txt","wb"))==NULL) { printf("3.txt文件无法打开! \n"); //exit(0); } for(i=0;strcmp(fword1[i].danci,"! ")! =0;i++)//将信息写入文件 { if(fwrite(&fword1[i],sizeof(structword),1,fp)! =1) { printf("存储错误! \n");a=0; } } if(a)printf("\n文章1统计结果已存入文件3.txt中,共%d条记录\n",i);//输出记录个数 fclose(fp); } /***************将文章2中的统计结果保存到4.txt文本文件中**********************/ voidsave2() { FILE*fp; inti,a=1; if((fp=fopen("4.txt","wb"))==NULL) { printf("4.txt文件无法打开! \n"); //exit(0); } for(i=0;strcmp(fword2[i].danci,"! ")! =0;i++)//将信息写入文件 { if(fwrite(&fword2[i],sizeof(structword),1,fp)! =1) { printf("存储错误! \n");a=0; } } if(a)printf("\n文章2统计结果已存入文件4.txt中,共%d条记录\n",i);//输出记录个数 fclose(fp); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 检验文件相似度 源代码 检验 文件 相似