软件工程个人小程序:分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来

       编程可谓是最令自己痛疼的事了,开学没几天,软件工程老师留给我们一个编程作业。说真的一点思路也没有,说也可笑,居然会莫名的害怕,不过,自从下定决心学习计算机(前2年半一直在犹豫,很傻哦!)就决定一定要自己编。也让自己从零开始(也许不是零呢),从第二周开始,除了上课,就是把C语言课本上的习题都实践一遍(真的有些收获)。周四软件老师留了个人编程作业:

       写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来。


      周五,周六两天就看C语言,做课后习题,(因为对编程脑子一片空白),周一下午就开始着手老师的作业。

      思路很简单:1 读文件,统计文件中单词个数(用C课本中的一道例题)

                      2  将文件内容分割成单词到二维数组中

                      3  对单词排序,并输出频率最高的10个单词

   周一下午:

             很简单地实现了读文件,以及统计文件中单词个数,但是如何将单词存到二维字符数组中真的很让我不知所措,就那样执拗地想,在本子上写写画画,晚上回到宿舍不甘心,洗漱完后又是挑灯夜战(编程是我弱项,必须花时间想),l一边理解课本上判断一个字符串中单词个数的算法(谭浩强 C程序设计P106),一边想如何在这个算法的基础上将单词统计到一个二维数组中。直到凌晨1点多。

             熬夜成果:实现了将每一个单词的首字符记录下来,在记录每个单词时输出的单词不对(虽然很笨,但是还是很高兴的,因为自己真的有在思考)。

周二上午及下午无课时:

           仍然执拗地进行”攻克“那一个对与我来说的难点,只要将文件中内容转化为单词存储到二维数组中,就可以继续下一步了。晚上,终于熬不住了,撇下作业,开始看C,编课后习题,要不这一天都没有什么实质性的收获了。

周三下午:

        在宿舍,上网查如何将字符串分割成单词(不敢直接找答案,那样就限制了自己的想法),了解到strtok()函数:

   原型
char *strtok(char *s, char *delim);
编辑本段功能
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串

一下午,完成统计单词个数,并将单词存储到数组中,晚上,开始进行将每个单词出现的次数记录并排序的部分,感觉思路很简单但是真正做起来还是有很多意外“惊喜”,最终,一个简单的程序终于实现。代码如下:
 1 #include<string.h> 
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #define N 1000
 5 void main() 
 6 {
 7   FILE *fp; 
 8   char filename[10];
 9   char s[N];  //保存文件中的内容  
10   char *d=" ";//在s串中将包含有 " "的位置处加上NULL,注意空格的输出  
11   char *p;  
12   int flag[N];  //标识
13   char a[N][N];
14   int i=0,n,m=0,l,j,temp1,temp2,b[N]={0},c[N]={0};
15   printf("请输入文件名:
");
16   scanf("%s",filename);
17   if((fp=fopen(filename,"r"))==NULL)
18   {
19     printf("文件打不开!
");
20     exit(0);
21   }
22   while(!feof(fp))   //文件内容保存在字符串数组s[]中
23   {
24     s[i]=fgetc(fp);
25     i++;
26   }
27     s[i]='