POJ 3371 Flesch Reading Ease

84 篇文章 0 订阅
47 篇文章 0 订阅

题目大意:

给出一篇合法的英语文章,求出句子数,单词数,音节数,带入一个公式,输出计算完成的得数。

这篇合法的文章里只有六种标点符号,其中有单词分隔符:逗号“,”,空格“ ”;句子分隔符:句号“。”,问号“?”,叹号“!”,分号“:”,冒号“:”。标点符号为英文格式。


注意:

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值