检验文件相似度 源代码.docx

上传人:b****1 文档编号:22983477 上传时间:2023-04-29 格式:DOCX 页数:10 大小:16.27KB
下载 相关 举报
检验文件相似度 源代码.docx_第1页
第1页 / 共10页
检验文件相似度 源代码.docx_第2页
第2页 / 共10页
检验文件相似度 源代码.docx_第3页
第3页 / 共10页
检验文件相似度 源代码.docx_第4页
第4页 / 共10页
检验文件相似度 源代码.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

检验文件相似度 源代码.docx

《检验文件相似度 源代码.docx》由会员分享,可在线阅读,更多相关《检验文件相似度 源代码.docx(10页珍藏版)》请在冰豆网上搜索。

检验文件相似度 源代码.docx

检验文件相似度源代码

//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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1