草滩小恪与英语单词--弱爆的小程序

草滩小恪一直为如何学习英语而苦恼, 特别是单词的记忆。临近考试啦,草滩小恪想恶补一下英语单词, 但是草滩小恪又是very lazy 所以 草滩小恪就找到了草滩大学的历年英语考试卷, 想背一下 阅读 里面出现的高频词汇。草滩小恪认为这idea真TM太机智啦!!!。 但是, 很快草滩小恪就发现, 寻找短文里面的高频词汇真TN的不是人能干的事。那么问题来啦, 咋办呢? 机智的读者想必早已知道了咋办。 是的, 就是这么办的。

程序说明:

主要功能: 统计一篇英语文章里的高频词汇

附加功能:练习拼写这些高频词汇的一个小游戏。

参数: 建立文本文件file1并保存目的文章。 建立包含你不希望统计的高频词汇(如, is , am are等)的文本文件file_namol。

好啦, 开始游戏吧!

  1 #include<iostream>
  2 #include<map>
  3 #include<vector>
  4 #include<cstring>
  5 #include<string>
  6 #include<algorithm>
  7 #include<iomanip>
  8 #include<fstream>
  9 #include<ctime>
 10 using namespace std;
 11
 12 //对 map的value排序。
 13 typedef pair<string, int> PAIR;
 14 bool cmp(const PAIR& l, const PAIR& r)
 15 {
 16     return l.second > r.second;
 17 }
 18
 19 const int MAXN = 1000 + 5;
 20 char str[MAXN], ss[MAXN];
 21 string s; int len, tot=0;
 22 double pinlv;
 23 map<string, int> word;
 24
 25 //转化单词为string型
 26 void change(int l, int r)
 27 {
 28     int j=0;
 29     for(int i=l; i<=r; i++)
 30     ss[j++] = str[i];
 31     ss[j]=‘\0‘;
 32     s=ss;
 33 }
 34
 35 int is(int  i)
 36 {
 37     if(str[i]>=‘a‘&&str[i]<=‘z‘)
 38     return 1;
 39     else if(str[i]>=‘A‘&&str[i]<=‘Z‘)
 40     {
 41         str[i]=str[i]-‘A‘+‘a‘;    //把大写的单词转化为小写。
 42         return 1;
 43     }
 44     return 0;
 45 }
 46
 47 //判断是否为单词
 48 int judge(int i)
 49 {
 50     for(int j=i; j<len; j++)
 51     {
 52         if(!is(j)) return j-1;
 53     }
 54     return len;
 55 }
 56
 57 //分离出单个的单词。
 58 void getword(char *str, char*ss)
 59 {
 60     int left, right;
 61     for(int i=0; i<len; i++)
 62     {
 63         if(is(i))
 64         {
 65             tot++;
 66             left = i;
 67             right = judge(i);
 68             change(left, right);
 69             word[s]++;
 70             i=right+1;
 71         }
 72     }
 73 }
 74
 75 //计算单词出现的频率。
 76 double pin(int n)
 77 {
 78     if(tot!=0) return (double) n*1.0/tot;
 79     return 0;
 80 }
 81
 82 //取绝对值函数。
 83 int ABS(int i)
 84 {
 85     if(i<0) return -1*i;
 86     return i;
 87 }
 88
 89 //  画心型  进行刷屏。
 90 void draw()
 91 {
 92     int N = 9;
 93     int i = 0, j = 0;
 94     for (i = -3*N/2; i <= N; i++)
 95     {
 96         for (j = -3*N/2; j <= 3*N/2; j++)
 97         {
 98             if ( (ABS(i) + ABS(j) < N)
 99                 || ((-N/2-i) * (-N/2-i) + ( N/2-j) * ( N/2-j) <= N*N/2)
100                 || ((-N/2-i) * (-N/2-i) + (-N/2-j) * (-N/2-j) <= N*N/2)
101                )
102             {
103                 printf( "* " );
104             }
105             else
106             {
107                 printf( ". " );
108             }
109         }
110         putchar( ‘\n‘ );
111     }
112 }
113
114 //记忆时间控制
115 void Time_Control(int T)
116 {
117     clock_t start, finish;
118     start =  clock();
119     do
120     {
121         finish = clock();
122     }while((int)(finish-start)/CLOCKS_PER_SEC<=T);
123 }
124
125 //对拼写成绩进行判定。
126 void solve(int wrong)
127 {
128     switch(wrong)
129     {
130         case 1:
131             cout<<"Sorry! you are wrong!\n";
132             break;
133         case 2:
134             cout<<"So bad! you should do it carefully!\n";
135             break;
136         case 3:
137             cout<<",,,what are you doging?, rubbish。\n";
138             break;
139         case 4:
140             cout<<"I beg you to do it better.\n";
141             break;
142         case 5:
143             cout<<"How rubbish you are!\n";
144             break;
145         default :
146             cout<<"Oh, my God! I give in!\n";
147     }
148     cout<<"\n\n\n\a\a\a";
149 }
150
151 int main()
152 {
153     word.~map();   pinlv = 0.001;//设定高频
154     ifstream fcin("file1.txt");    //文章
155     ofstream fcout("file2.txt");
156     //ifstream fcin2("file_namol.txt");
157     int flag = 0;//控制文件结束
158     while(true)
159     {
160         fcin.getline(str, MAXN);
161         len = strlen(str);
162
163         if(len==0)
164         {
165             flag++; if(flag==3) break;//连续出现三个空行, 表示文件结束。
166         }
167         else flag = 0;
168         getword(str, ss);
169     }
170
171     //去除 连写 ,‘s  , 和常见 简单单词。
172     ifstream fcin2("file_namol.txt");
173     while(fcin2>>s)
174     word[s]=0;
175
176     //按频率排序。
177     vector<PAIR> words(word.begin(), word.end());
178     sort(words.begin(), words.end(), cmp);
179
180     //把高频词汇写入文件
181     for(int i=0; i<words.size(); i++)
182     if(pin(words[i].second)>=pinlv)
183     {
184         fcout<<"单词:"<<setw(20)<<words[i].first<<"\t\t\t出现的频率:"<<pin(words[i].second)<<endl;
185     }
186
187     //记忆单词小游戏。
188     int wrong = 0;
189     for(int i=0; pin(words[i].second)>=pinlv; i++)
190     {
191         if(i%10==0) wrong = 0;
192         cout<<"请在五秒内记住该单词\n";
193         cout<<words[i].first<<endl;
194         Time_Control(5);
195         draw();
196         cout<<"请在 8 秒内拼写出刚才的那个单词\n\n";
197         clock_t start, finish;
198         do{
199             start =  clock();
200             cin>>s;
201             finish = clock();
202             cin>>s;
203             if((int)(finish-start)/CLOCKS_PER_SEC>8)
204             cout<<"You finished it so slow, please do it faster!\n\n\n\n";
205         }while((int)(finish-start)/CLOCKS_PER_SEC>8);
206         if(s==words[i].first) cout<<"You are so clever! wonderful!\n\n\n\n\n\n\n\n\n";
207         else
208         {
209             wrong++;
210             solve(wrong);
211         }
212     }
213     return 0;
214 }
215  

悄悄地告诉你草滩小恪的file_namol文件:

of the we and in have a would it as to life but what who is those day last i his us that should be days all sight are live each hours only or time our hearing death hero not values often more sometimes being an for make such  same if take some do which at when most were with blind usually use always by until thought lost him old one out read realize regrets rule saved sense toward teach their there these they think thinking this tomorrow tasks under  vigor vista was whose without wondering year sights years stroke suffered does chose nt s has been times living used change other clsss

时间: 2024-10-10 15:46:11

草滩小恪与英语单词--弱爆的小程序的相关文章

聊聊程序员如何学习英语单词:写了一个记单词的小程序

背景: 关于英文对程序员的重要性,就不多说了! 英语的学习,有很多,今天也不聊多,只聊英语单词! 关于单词的记忆,找过很多方法,下载过很多软件. 如图(其它不好用的都卸载了): 上图算是我以前用过软件,注意,是以前哦~~~ 意思就是没有坚持下来~~~~ 随时间的推移,最后它们还是被我遗忘了~~~ 为什么???不能:坚持!坚持!坚持! 学习思考: 一直在找方法: 1:下载过联想记忆法.背文章记单词,词根,各种视频~~~ 2:连单词的数据库都网上下载了一份了,期望从数据库的直接记忆单词快些~~~ 通

48个国际英语音标发音表与英语单词的偏旁部首

英语48个国际音标表 元音 20个 单元音 前元音 [i?](一拖长) [?](一) [e] [æ] 中元音 [??](厄拖长) [?]( 厄) [?](啊) 后元音 [u?](屋拖长) [?]( 屋) [??](凹拖长) [?](凹) [ɑ?](啊拖长) 双元音 开合双元音 [e?](A) [a?](爱) [??]( 凹一) [a?](阿-屋) [??]( 欧) 集中双元音 [??](一厄) [e?]( 哀-厄) [??]( 屋-厄) 辅音 28个 爆破音 清辅音 [p] [t] [k] 浊辅

【C++探索之旅】第一部分第十一课:小游戏,猜单词

内容简介 1.第一部分第十一课:小游戏,猜单词 2.第一部分第十二课预告:指针一出,谁与争锋 小练习 上一课<[C++探索之旅]第一部分第十课:文件读写,海阔凭鱼跃>中我们学习了读写文件的知识. 第一部分的课程也快接近尾声了,下一课我们会学习很重要的指针的知识.之后,我们就进入第二部分:面向对象编程了.哈哈哈,激动不? 目前为止,我们也学了不少内容:编译基本原理,IDE,变量,函数,条件语句,循环语句,引用,数组,文件读写,等等.你应该为自己感到自豪. 俗语说得好:实践是最好的老师.我们学了那

为什么有些大公司技术弱爆了?

[转载自互联网 http://blog.jobbole.com/96190/ ] 本文整理自知乎上的同名讨论帖:<为什么有些大公司技术弱爆了?>,有网友提问: 今年年初,到一家互联网公司实习,该公司是国内行业龙头.不过技术和管理方面,却弱爆了. 那里的程序员,每天都在看邮件,查问题工单.这些问题,多半是他们设计不当,造成的.代码写的一团糟,全是复制粘贴,连作者都没改,大家普遍不写注释,也不格式化,代码歪歪扭扭. 一个项目里,httpclient竟然出现了四种.一种是该公司研发部写的,一种是老版

Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: 1 //如下是第一个程序的 CharBasic文件 2 package src; 3 4 public final class CharBasic { 5 //检测字母是否为字母 6 public static boolean isAtoZ(char c){ 7 return c<='z'&&c>

iOS--苹果API常见英语单词

苹果API常见英语单词0. indicating 决定1.in order to 以便2.rectangle bounds 矩形尺寸3.applied 应用4.entirety 全部5.technique 方法6.truncating 截短7.wrapping 换行8.string 字符串9.familiar style 简体10.The styled text 主题样式11.Constants 常量12.Attribute 属性13.Consecutive 连续14.Shrink 收缩15.D

英语单词学习窗体(一)

想背英语单词,于是尝试写个WinForm窗体,将单词录入数据库(好记心不如烂笔头,敲键盘也可以吧,边录入,边记). 1.软件用的是VS2010,首先创建解决方案,创建Windows窗体应用程序: 2.创建一个录入单词的窗体,添加相应的textbox.button.label. 3.我是按照单词本添加的,依次添加英语.汉语.对单词首字母及对应页数中间用.隔开, 相应的Name是txtEnglish.txtChinese.txtMemo,因为要多次用的这里新建了一个StrudyEnglish.Mod

第二学期 英语单词整理-网络方面

<大型企业网络设计及部署> 1.Packet  数据包 2.Count  数值 3.Network  网络 4.Mask    掩码 5.Address  地址 6.Interface  接口 7.Configuration  Register  配置寄存器 8. IOS    互连网络操作系统 9. Model   模块 10.SN (serial number)  产品序列号 11.Type  类型 12.control    控制 13.message   消息 14.protocol

“匿名聊聊”作者谈如何打造现象级爆款小程序

前段时间小程序“匿名聊聊”刷爆了朋友圈,可惜后面被屏蔽了.作为第一款现象级呈现爆炸级传播的小程序它是如何做到的呢?我们就跟随“匿名聊聊”作者来聊聊如何打造现象级爆款小程序. 作为第一款现象级呈现爆炸级传播的小程序,“匿名聊聊”背后的公司:朋友印象是一家深耕社交产品的公司,创始人栗浩洋和魏志成两人都公开表示,这次的“匿名聊聊”是扔出的一个问路的石子,真正的生化武器和核弹还在后面. 被寄予厚望的小程序自今年1月上线以来,一直表现的冷冷清清.流量入口没有优先级的倾斜,用户获取提供的也是模糊搜索,即便微