POJ 3371 Flesch Reading Ease
题目大意:
给出一篇合法的英语文章,求出句子数,单词数,音节数,带入一个公式,输出计算完成的得数。
这篇合法的文章里只有六种标点符号,其中有单词分隔符:逗号“,”,空格“ ”;句子分隔符:句号“。”,问号“?”,叹号“!”,分号“:”,冒号“:”。标点符号为英文格式。
注意:
1、元音字母里竟然有“y”????(反正加上这个就对了……)
2、不要对文章重复扫描,必然超时!!!
3、文章输入结束的标志为EOF 。
4、这是一篇合法的文章,所以单词有正确的大小写分布。
5、最后计算时注意变量类型,输出时建议用cout输出,printf输出要用“%f”!!!!
下面是代码:
#include <stdio.h> int main() { char s[1000]; int word=0,sentance=0,syllable=0,wordlen,syl,i; while(scanf("%s",s)!=EOF) { wordlen=0; syl=0; bool flag_frevowel=false; for(i=0; s[i]!='\0'; i++) { if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) { wordlen++; if(wordlen<=3) { if(!((s[i+1]>='a'&&s[i+1]<='z')||(s[i+1]>='A'&&s[i+1]<='Z'))) { syllable++; syllable-=syl; syl=0; continue; } } if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'||s[i]=='y'||s[i]=='A'||s[i]=='E'||s[i]=='I'||s[i]=='O'||s[i]=='U'||s[i]=='Y') { if(s[i]=='e') { if(!((s[i+1]>='a'&&s[i+1]<='z')||(s[i+1]>='A'&&s[i+1]<='Z'))&& s[i-1]=='l') //-le { syllable++; syl++; continue; } else if(!((s[i+1]>='a'&&s[i+1]<='z')||(s[i+1]>='A'&&s[i+1]<='Z'))) { continue; } else if((s[i+1]=='d' || s[i+1]=='s') && !((s[i+2]>='a'&&s[i+2]<='z')||(s[i+2]>='A'&&s[i+2]<='Z'))) // -ed -es { continue; } } if(!flag_frevowel) { flag_frevowel=true; syllable++; syl++; continue; } else { continue; } } flag_frevowel=false; } else if(s[i]==',') { flag_frevowel=false; wordlen=0; syl=0; word++; } else if(s[i]=='.' || s[i]=='?' || s[i]==':' || s[i]==';' || s[i]=='!') { flag_frevowel=false; wordlen=0; word++; syl=0; sentance++; } } if((s[i-1]>='a'&&s[i-1]<='z')||(s[i-1]>='A'&&s[i-1]<='Z')) { word++; } } printf("%.2f\n",206.835-1.015*(double)word/(double)sentance-84.6*(double)syllable/(double)word); return 0; }