| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 239 人关注过本帖
标题:【求助】比较两个文本的相似度!(课设)大哥们,我急用!
收藏  订阅  推荐  打印
mh4763261
Rank: 1
等级:新手上路
帖子:1
积分:112
注册:2008-7-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");
    }
}

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

[ 本帖最后由 mh4763261 于 2008-7-1 13:17 编辑 ]
2008-7-1 13:13
水中无月
Rank: 2
等级:注册会员
帖子:186
积分:1992
注册:2008-6-17

自己再好好看看C教材的 数据结构与循环 这章吧
2008-7-1 14:44
共有 238 人关注过本帖
发新话题
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.063642 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved