一、目标
*开发工具:CodeBlocks
*开发语言:C++
*源代码管理Github链接:https://github.com/Snoopyjinjin/cipin
二、要求
实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。
附加要求:读入一段文本文件,统计该文本文件中单词的频率。
三、思路分析
一个单词的结束是以非字母的形式结尾,所以应把单词分开。创建数组用来存储单词字符,并从磁盘中导入含有英文单词的文本文档。在这里,我本来打算是直接从键盘上输入一长串字符的,如老师示例给的单词数较少,直接键入也行,但如果单词数较多,直接键入容易出错,也比较浪费时间,所以宜把它存入文本文档再进行读取。后来我在附加条件中也看到了该要求。
原本预计完成这次作业需要一下午的时间,但天不遂人愿,我用了一下午加一晚上的时间才完成。哎,果然能力捉急呀/(ㄒoㄒ)/~~
四、源码
#include <iostream> #include <cstring> #include <fstream> using namespace std; typedef struct word { int count; char word[WORD_LEN]; } struct Stack { Word wd[1000]; int count; void push(char* word) { for(int i=0;i<count;i++) { if(strcmp(wd[i].word,word)==0) return; } wd[count].word=word; wd[count].ref=1; count++; } void main() { Stack st; st.count=0; fstream ("G:\英文.txt","r"); char* buf=(char*)malloc(10000); int len=fread(buf,1,10000,fa); char* word=buf; //全部转为小写 for(int i=0;i<len;i++) { if(buf[i]>='A' && buf[i]<='Z') buf[i]+='a'-'A'; } for(i=0;i<len;i++) { if(buf[i]<'a' || buf[i]>'z') { buf[i]='