---恢复内容开始---
项目开发
输入英文查找出十个出现频率最高的单词
项目分析
第一步:依据要在查找出的单词中找到十个出现最高的词,我定义数据类型是结构体;在结构体中定义了char 数组和int 类型,其中char 数组存放单词,int类型存放此单词在文章中出现的次数;在扫描文章后所有的单词和出现的次数都会统计到结构体中。
第二步:在第一步的基础上,我开始利用选择排序法,对单词出现的次数进行排序
第三步:在前二步的基础上,只要输出前十个高频单词就可以完成该程序的任务
项目时间
日期 | 22日上午9点半--11点半 | 24日晚上九点--10点半 | 27日下午二点--四点 |
工作 |
思考程序的算法,制定该使用什么数据结构 并编写函数,用于扫描文章的单词、并记录单词 出现的次数 |
调式代码,并解决出现一些问题,例如: 纠正了同样一个单词,但因为大小写的原 因,区分为二个不同的单词 |
最后的测试以及编写博客 |
项目定义的数据结构
typedef struct WordCount { char Word[20]; //单词 int Count; //单词出现的次数 }T_WordCount;
项目测试的数据
An old woman had a cat. The cat was very old; she could not run quickly, and she could not bite, because she was so old. One day the old cat saw a mouse; she jumped and caught the mouse. But she could not bite it; so the mouse got out of her mouth and ran away, because the cat could not bite it
项目测试的结果
核心代码的分析
1 while(*m!='!') 2 { 3 j=M; 4 if(*m>='a'&&*m<='z') 5 { 6 *p=*m; 7 m++; 8 p++; 9 t++; //字符的个数 10 } 11 else 12 { 13 *m=*m+32; 14 *p=*m; 15 m++; 16 p++; 17 t++; 18 19 } 20 if(*m==32) 21 { 22 memset(c1,0,20); 23 for(flog,i=0;flog<t;flog++,i++,k++) 24 { 25 c1[i]=c[k]; 26 } 27 for(i=0;i<=j;i++) 28 { 29 if(strcmp(wordset[i].Word,c1)==0) 30 { 31 wordset[i].Count++; 32 break; 33 } 34 } 35 if(i-1==j) 36 { 37 strcpy(wordset[a].Word,c1); 38 wordset[a].Count++; 39 M++; 40 a++; 41 } 42 m++; 43 k=t; 44 45 } 46 }
通过定义字符指针读取一个一个字符,如果字符是小写字母,则继续下一个字符的读取;如果字符是大写字母,则转化为小写字母继续读取;如果是空格则代表已经完全读完一个单词了,这时要判断此单词在结构体中是否拥有,如果已经存在,则在结构体中的Count中加1;如果没有此单词,则在结构加入该单词且置数为1.
其在我们设置一个数a,用于记录结构体中已经加入的数字,方便用于下一步排序
1 for(i=0;i<a-1;i++) //选择法排序 2 { 3 k=i; 4 for(j=i+1;j<a;j++) 5 { 6 if(wordset[j].Count>wordset[k].Count) 7 { 8 k=j; 9 } 10 else 11 { 12 k=i; 13 } 14 if(k!=i) 15 { 16 temp=wordset[k]; 17 wordset[k]=wordset[i]; 18 wordset[i]=temp; 19 } 20 21 } 22 }
通过选择排序法将已经统计的单词个数进行排序
1 printf("英文中出现的10个最多的英文单词是:\n"); 2 for(i=0;i<10;i++) //输出单词 3 { 4 printf("%s",wordset[i].Word); 5 printf("\t%d\n",wordset[i].Count); 6 }
输出前十个出现最多的单词
项目总结和体会
通过本项目深刻理解了个人软件开发的流程,明白了软件的初期的需求分析和程序思路对于软件后期开发的重要性。对于今后的学习要更加注重编程的思路和代码的完善度
---恢复内容结束---