【求助】C语言编程,比较两个文件相似度!
发布网友
发布时间:2022-05-22 07:06
我来回答
共1个回答
热心网友
时间:2024-03-07 05:35
#include"stdio.h"
#include"string.h"
#define N(a,b) 2.0*a/b*100
FILE *pa,*pb;
int t,m;
char a[100],b[100];
/*创建文件1*/
void Creat1_Z()
{
if((pa=fopen("d:\\file1.txt","w+"))==NULL)
printf("\tCannot open this file!\n");
else
{ printf("\tEnter a string to File1:\n");
getchar();
gets(a);
fputs(a,pa);
printf("\tSuccess!\n");
}
fclose(pa);
}
/*创建文件2*/
void Creat2_Z()
{
if((pb=fopen("d:\\file2.txt","w+"))==NULL)
printf("\tCannot open this file!\n");
else
{ printf("\tEnter a string to File2:\n");
getchar();
gets(b);
fputs(b,pb);
printf("\tSuccess!\n");
}
fclose(pb);
}
/*相似性比较*/
void contrast( )
{
char str1[15],str2[15];
int i=0,j=0,t=0,s,k=1,f=1;
while(k==1)
{
for(s=0;(a[i]!=32)&&(a[i]!=0);s++,i++)//把==0去掉了 ,更简洁
str1[s]=a[i];
str1[s]='\0';
//if(str1=="") continue;
f=1;
j=0;
while(f==1)
{
for(s=0;(b[j]!=32)&&(b[j]!=0);j++,s++) //把==0去掉了 ,更简洁
str2[s]=b[j];
str2[s]='\0';
//if(str2=="") continue;
if(strcmp(str1,str2)==0)
{
t++;
f=0;
continue;
}
j++;
if(b[j]==0) f=0;
}i++;
if(a[i]==0) k=0;
}
printf("相同单词数:%d\n",t);
for(i=0,j=0,s=0;a[i]!=0;i++)
if(a[i]==32) s=0;
else if(s==0) {s=1;j++;}
for(i=0,s=0;b[i]!=0;i++)
if(b[i]==32) s=0;
else if(s==0) {s=1;j++;}
printf("相似度:%5.2f%%\n",N(t,j));
if(N(t,j)>=80) printf("相同!\n");
else printf("不同!\n");
}
/**/
void mune()
{
printf("*****************判断两个文件是否相同*****************\n");
printf("\t\t 1:创建文件1\n");
printf("\t\t 2:创建文件2\n");
printf("\t\t 3:判断相似性\n");
printf("\t\t 4:退出\n");
printf("####################请选择###########################\n");
printf("****************************************************\n");
}
/**/
void main()
{
while(t!=4)
{
mune(); //单词拼错了,应该是menu,菜单的意思
scanf("%d",&t);
switch (t)
{
case 1: Creat1_Z(); break;
case 2: Creat2_Z(); break;
case 3: contrast();break;
case 4:break;
default: printf("输入错误!请重新输入!\n");
}
}
}
我没有找到你说的个goto语句哦,不过我把那一大堆if else改掉了,而且在vc++环境下运行的很好~