题目大意:
给出一篇合法的英语文章,求出句子数,单词数,音节数,带入一个公式,输出计算完成的得数。
这篇合法的文章里只有六种标点符号,其中有单词分隔符:逗号“,”,空格“ ”;句子分隔符:句号“。”,问号“?”,叹号“!”,分号“:”,冒号“:”。标点符号为英文格式。
注意:
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;
}