标题:【求助】比较两个文本的相似度!(课设)大哥们,我急用!
只看楼主
mh4763261
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-1
 问题点数:0 回复次数:1 
【求助】比较两个文本的相似度!(课设)大哥们,我急用!
这周我们C语言课设,可是周四就考电工了!麻烦大哥哥大姐姐们帮我做个编程!谢谢啦!
  原题:用程序创建两个文本,并输入一些单词,然后判断他们两个文本的相似度。如果二者所有的单词中,相同的单词数量占总量的%80,则认为两者雷同。
  课程设计要求:
  1、贯彻结构化程序设计思想
  2、用户界面友好,功能明确,操作方便
  3、用户界面中至少有“创建文件1、创建文件2、判断相似性、退出”4项。
  4、代码应适当缩进,并给出必要注释,以增强程序的可读性!
  小弟这有个程序,但是不正确,并且老师不让用goto语句,大侠们也可以改一下帮忙!谢谢啦!
#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)==1;s++,i++)
    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)==1;j++,s++)
        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();
        scanf("%d",&t);
        if(t==1) Creat1_Z();
        else if(t==2) Creat2_Z();
        else if(t==3) contrast();
        else if(t==4) ;
        else printf("输入错误!请重新输入!\n");
    }
}

[[it] 本帖最后由 mh4763261 于 2008-7-1 13:14 编辑 [/it]]

[[it] 本帖最后由 mh4763261 于 2008-7-1 13:17 编辑 [/it]]
搜索更多相关主题的帖子: 文本 单词 电工 goto include 
2008-07-01 13:13
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
得分:0 
自己再好好看看C教材的 数据结构与循环 这章吧
2008-07-01 14:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-222104-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012913 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved