题目:查询一篇英文中出现的次数最多的10个单词
分析:虽然题目只是简单的要求找出出现频率最多的10个单词。但是在实际的编程中,遇到的问题还是很多的。首先,得解决文件的打开问题,也就是说文件是从那个地方读取出来了的,在这里,我采用的是C语言中的文件的打开函数fopen()。根据书上的例子,然后在做了一些修改,基本上可以实现打开文件的目的。其次,要解决的是打开之后,对数据的分析。在这一步,第一,将文章出现的大写都转换成小写;第二,对这些字符串进行统计,出现的次数做一个统计。第三,对这些数据进行比较,也就是比较关键的排序。在这一步,我才用的是冒泡排序法。在排序的过程中,由于有许多,细节方面的问题没有处理好,所以整个程序的运行,还存在一些问题,并且整这个程序显得比较无序和杂乱,以后的几天我会继续对此程序进行后续的完成。下面,附上源程序:
源程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 100000
#define N 10
struct word
{
char w[50];
int n;
}w[M];
int main()
{
FILE *fp;
char infile[30],ch;
int i,flag;
printf("请输入文件地址:");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL)
{printf("无法打开此文件!
");
exit(0);}
while((ch=fgetc(fp))!=EOF)
{
fclose(fp);
for(i=0;i<N;i++)ko[i]=0;
scanf("%d",&n);
fg=0;
i=0;
strncpy(wd,ko,N);
while(fg<at)
{
if(isalpha(t[fg]))
{
wd[i]=t[fg];
i++;
}
if(t[fg]==32&&i>0)break;
fg++;
}
strncpy(root.a,ko,N);
strcpy(root.a,wd);
root.i=1;
root.left=NULL;
root.right=NULL;
i=0;
strncpy(wd,ko,N);
while(fg<at)
{
if(isalpha(t[fg]))
{
wd[i]=t[fg];
i++;
}
if(t[fg]==32&&i>0)break;
fg++;
}
else
{
if(flag==1)
{ b[i]=' ';
for(j=0;j<k;j++)
{
if(strcmp(b,w[j].w)==0)
{m=1;break;}
}
if(m) w[j].n++;
else
{w[k].n=1;strcpy(w[k].w,b);k++;}
}
if('A'<=ch && ch<='Z') ch+=32;
if('a'<=ch && ch<='z')
{b[i]=ch;i++;flag=1;}
}
}
}
for(i=0;i<k;i++) { printf("%s %d
",w[i].w,w[i].n);}
printf("
");
for(i=0;i<k&&i<5;i++)
{
t=0;
while(w[t].n==0) t++;
for(j=1;j<k;j++)
{
if(w[j].n>w[t].n) t=j;
else
if(w[j].n==w[t].n)
{
if(strcmp(w[j].w,w[t].w)<0)
t=j;
}
}
printf("%s 出现次数:%d
",w[t].w,w[t].n);
w[t].n=0;
}
return 0;
}
总结:本次的程序,由于本人对编程的生疏,导致本程序失败,问题不少,并且对基本的要求都没有完成。在以后的这周,会在空闲时间对程序进行改善,达到简化的目的。