POJ3371-Flesch Reading Ease

來源:互聯網
上載者:User

 

轉載請註明出處:優YoU http://user.qzone.qq.com/289065406/blog/1308452631

 

大致題意:

給出一篇規範的文章,求其 句子數、單詞數 和 音節數

把這3個值代入題目給出的公式,輸出其結果,保留2位小數。

PS:“規範”即文章沒有錯誤的標點符號,字母在適當的位置有大小寫。

 

解題思路:

我做了整整5天的BT題,,就是被標點符號害的!!!

別聽信網上讒言,我個人總結出這題的標點符號只有6個!!!

 

註:下面的分隔字元不包括 括弧(),所有分隔字元均為 英式標點符號

 

標記單詞分隔字元: 逗號(,) 和 空格( )

句子分隔字元:句號(.) 問號(?) 冒號(:) 分號(;) 驚嘆號(!)

 

不存在上述標點符號以外的符號!!!所有符號只佔一個字元的位置!!

什麼 省略符號、引號、連字號、問號+歎號、斜杠 等等符號統統不存在!!

 

知道這個,後面的就好做了

 

每出現一個單詞分隔字元,單詞數+1

每出現一個句子分隔字元,句子數+1

 

注意:

由於用while(cin>>msg)輸入文章,因此是按 Null 字元 把文章分開若干片段,直到出現EOF時才結束輸入,因此msg中的單詞分隔字元不會出現空格,只要當msg最後一個字元為字母時,就說明此時的單詞分隔字元為空白格。

 

音節數是最難處理的,其規律如下:

(1)       當單詞總長度<=3時,音節數無條件+1

(2)       當單詞總長度>3時,單詞中每出現一個母音字母(a、e、i、o、u、y),音節數+1,但是連續的母音字母只按1個音節計算,且當單詞尾碼為-es、-ed和-e時,尾碼的母音字母e不列為音節數計算。但是尾碼-le例外,要計算音節數。

 

注意:

(1)母音字母要判斷12個,6個小寫,6個大寫。

(2)輸入的文章每個字元只能掃描一次,若重複掃描會逾時。

 

 

//Memory Time //244K   0MS #include<iostream>#include<iomanip>using namespace std;int word=0;     //單詞數int sentance=0; //句子數int syllable=0; //音標數bool isalpha(char ch)  //檢查字元ch是否為字母{if(ch>='A' && ch <='Z')return true;if(ch>='a' && ch <='z')return true;return false;}bool isvowel(char ch)  //檢查字元ch是否為母音字母{if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u' || ch=='y')return true;if(ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' || ch=='Y')return true;return false;}bool isword(char ch)  //檢查字元ch是否為單詞分隔字元{if(ch==',')return true;return false;}bool issentance(char ch)  //檢查字元ch是否為句子分隔字元{if(ch=='.' || ch=='?'  || ch==':' || ch==';' || ch=='!')return true;return false;}int main(void){char msg[1000];while(cin>>msg)   //以空格為標記,截取文章片段{int wordlen=0;bool flag_frevowel=false;   //噹噹前字元為母音時,檢查前一字元是否為母音的標記int syl=0;  //假設當前單詞長度>3時,記錄音節數的變化量。若單詞實際長度<=3,則syllable-sylint i;for(i=0;msg[i];i++){if(isalpha(msg[i]))   //當前字元為 字母{wordlen++;  //當前所處理的單詞的已知長度 (已知長度<=實際長度)if(wordlen<=3)  //當 已知長度<=3 時{if(!isalpha(msg[i+1]))   //檢查單詞實際長度是否<=3{syllable++;     //當實際長度<=3時,syllable無條件+1syllable-=syl;   //實際音節數調整,單詞實際長度<=3,則syllable減去 "假設單詞長度>3時" 音節數的變化量sylsyl=0;continue;}}if(isvowel(msg[i]))    //當前字母為 母音字母{if(msg[i]=='e'){if(!isalpha(msg[i+1]) && msg[i-1]=='l')  //-le{syllable++;syl++;      //由於不知道單詞的實際長度,因此總音節數syllable與音節數變化量syl同時遞增continue;}else if(!isalpha(msg[i+1]))  // -econtinue;else if((msg[i+1]=='d' || msg[i+1]=='s') && !isalpha(msg[i+2]))  // -ed  -escontinue;}/*處理連續或單個母音*/if(!flag_frevowel)   //當前字母為母音,但前一字元不是母音{flag_frevowel=true;syllable++;syl++;continue;}else     //當前字母為母音,但前一字母也是母音,即出現連續母音,syllable不計數continue;}flag_frevowel=false;   //當前字母不是母音}else if(isword(msg[i]))   //當前字元為 單詞分隔字元{flag_frevowel=false;wordlen=0;  //當前單詞操作已結束,長度清零,計算下一單詞syl=0;word++;}else if(issentance(msg[i]))   //當前字元為 句子分隔字元{flag_frevowel=false;wordlen=0;  //當前單詞操作已結束,長度清零,計算下一單詞word++;syl=0;sentance++;}}if(isalpha(msg[i-1]))     //當前文章片段最後一個字元為 字母word++;}cout<<fixed<<setprecision(2)<<206.835-1.015*(double)word/(double)sentance-84.6*(double)syllable/(double)word<<endl;return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.