读入文本,找出出现频率最高的10个单词~~~~

思路:先创建一个结构体word,用来存放单词,再创建一个空的与其一样的结构体o用来交换

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct word
{
   char c[30];
   int n;
}w[10000];
struct word o;

下面程序主体,变量声明,打开文本文件看是否文件为空

void main()
{
    FILE *fp;
    char ch;
    int k=0,h,m,l,j,x,i=0,sum;
    fp=fopen("D://huang.txt","r");
if(fp==NULL)
{
    printf("无法打开此文件\n");
    exit(0);
}

下面代码将单词存入结构体用while,if循环

while(!feof(fp))
{
    ch=fgetc(fp);
    if(ch<='Z'&&ch>='A')
    ch=ch+32;
       if(ch<='z'&&ch>='a')
{
       w[k].c[i]=ch;
       i++;
       h=1;
}
else
{if(h==1)
     k++;
     h=0;
     i=0;
}
     sum=k;
}

下面是判断是否有相同单词,若有将结构体中的单词出现次数n置0

for(i=0;i<sum;i++)
{
      w[i].n=1;
}

for(m=0;m<sum;m++)
{
      for(l=m+1;l<sum;l++)
{
        if(strcmp(w[m].c,w[l].c)==0)
{
           if(w[m].n==0||w[l].n==0)
              continue;
                  else
{
             w[m].n++;
             w[l].n=0;
}
}

下面是按着单词出现次数n,进行排序

for(i=0;i<sum;i++)
      for(j=i+1;j<sum;j++)
{
      if(w[i].n<w[j].n)
{
          o=w[i];
          w[i]=w[j];
          w[j]=o;
}
}

下面是将结果输出再屏幕

printf("单词总数%d\n",sum);
for(x=0;x<10;x++)
printf("单词%s 出现次数\t%d\n",w[x].c,w[x].n);
fclose(fp);
}

结果截图:

 

posted @ 2014-03-02 15:21  黄为  阅读(598)  评论(1编辑  收藏  举报