编程可谓是最令自己痛疼的事了,开学没几天,软件工程老师留给我们一个编程作业。说真的一点思路也没有,说也可笑,居然会莫名的害怕,不过,自从下定决心学习计算机(前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]='