1、检验文件相似度 源代码/ xiangsidu.cpp : Defines the entry point for the console application./#include stdafx.h/#include stdlib.h#include #include void format(); /没有参数或参数为“/?”时的帮助提示void xiangsidu(); /实现对两个目标文件统计相似度的功能int read1(char *txt); /从命令行参数输入的文件指针读入文件1的内容int read2(char *pho); /从命令行参数输入的文件指针读入文件2的内容void sa
2、ve1(); /将文章1的统计结果保存到3.txt文本文件中void save2(); /将文章2的统计结果保存到4.txt文本文件中 char article150000;char article250000;char word150020;char word250020;int number2,number1;struct word char danci20; int num; float bili;fword1100,fword2100;/*主函数*/void main (int argc, char *argv) int flag1,flag2; if(argc=1) format()
3、; else if (argc=2)&strcmp(argv1,/?)=0) format(); else if(argc=3) flag1=read1(argv1); flag2=read2(argv2); if(flag1=0|flag2=0) printf(读取信息失败!n); else xiangsidu();save1();save2(); else printf(n该程序应该携带2个参数!n);void format() /没有参数或参数为“/?”时的帮助提示 printf(n命令格式为:xingsidu SourceFile TargetFilenn); printf(Sourc
4、eFile指文章1的文本文件n); printf(TargetFile指文章2的文本文件n);/*从命令行参数输入的文件指针读入文件1的内容*/int read1(char *txt) FILE *ftxt; int i,n; if(ftxt=fopen(txt,rb)=NULL) /txt即指向的文本文件1的指针 printf(%s文件无法打开!n); return 0; printf(nnttt读取文件.nn); for (i=0;!feof(ftxt);i+) /文件内部指针未到文件尾,执行循环体 article1i=fgetc(ftxt); /从ftxt所指文件中读取一个字节信息 n=
5、i-1; fclose(ftxt); article1i=n; printf( n文章1内容如下:nn); for(i=0;in;i+) putchar(article1i); return 1;/*从命令行参数输入的文件指针读入文件2的内容*/int read2(char *pho) FILE *fpho; int i,n; if(fpho=fopen(pho,rb)=NULL) /pho即指向的文本文件2的指针 printf(%s文件无法打开!n); return 0; printf(nnttt读取文件.nn); for (i=0;!feof(fpho);i+) /文件内部指针未到文件尾,
6、执行循环体 article2i=fgetc(fpho); /从fpho所指文件中读取一个字节信息 n=i-1; fclose(fpho); article2i=n; printf( n文章2内容如下:nn); for(i=0;i=65&article1i=97&article1i=65&article2i=97&article2i=122) word2jk=article2i; k+; else if(article2i= |article2i=,|article2i=.) word2jk=0; j+; k=0; number2=j; /文章2中所有的单词个数number2 k=0; strc
7、py(fword10.danci,!); strcpy(fword20.danci,!); for(i=0;inumber1;i+) /两篇文章中相同单词的统计 flag=1; for(j=0;jnumber2;j+) if(strcmp(word1i,word2j)=0) for(m=0;strcmp(fword1m.danci,!)!=0;m+) /检测相同的单词在前面是否已经统计过 if(strcmp(word1i,fword1m.danci)=0) flag=0; if(flag) strcpy(fword1k.danci,word1i); /将相同的单词分别存入结构体数组fword1
8、和fword2中 strcpy(fword2k.danci,word2j); k+;strcpy(fword1k.danci,!);strcpy(fword2k.danci,!); break; for(i=0;strcmp(fword1i.danci,!)!=0;i+) /对文章1中相同单词个数的统计 fword1i.num=0; for(j=0;jnumber1;j+) if(strcmp(fword1i.danci,word1j)=0) fword1i.num+; fword1i.bili=(float)fword1i.num/(number1+1)*100; /相同单词在文章1中占的比
9、例 for(i=0;strcmp(fword2i.danci,!)!=0;i+) /对文章2中相同单词个数的统计 fword2i.num=0; for(j=0;jnumber2;j+) if(strcmp(fword2i.danci,word2j)=0) fword2i.num+; fword2i.bili=(float)fword2i.num/(number2+1)*100; /相同单词在文章2中占的比例 printf(文章1单词总数:%dn,number1); printf(文章2单词总数:%dn,number2); printf(nnntt 文章1tt 文章2n); printf(n相同
10、单词t个数 t百分比tt个数t 百分比n); for(i=0;strcmp(fword1i.danci,!)!=0;i+) printf(%5s t%dt%5.2f% t%dt %5.2f% n,fword1i.danci,fword1i.num,fword1i.bili,fword2i.num,fword2i.bili); /*将文章1的统计结果保存到3.txt文本文件中*/void save1() FILE *fp; int i,a=1; if(fp=fopen(3.txt,wb)=NULL) printf(3.txt文件无法打开!n); / exit(0); for (i=0;strcm
11、p(fword1i.danci,!)!=0;i+) /将信息写入文件 if(fwrite(&fword1i,sizeof(struct word),1,fp)!=1) printf(存储错误!n);a=0; if(a) printf(n文章1统计结果已存入文件3.txt中,共%d条记录n,i);/输出记录个数 fclose(fp);/*将文章2中的统计结果保存到4.txt文本文件中*/void save2() FILE *fp; int i,a=1; if(fp=fopen(4.txt,wb)=NULL) printf(4.txt文件无法打开!n);/ exit(0); for (i=0;strcmp(fword2i.danci,!)!=0;i+) /将信息写入文件 if(fwrite(&fword2i,sizeof(struct word),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