POJ 2341 Spell Checker
問題
アルファベットと.,;:-!?とスペースからなる文章が与えられる.文の区切りは.か!か?である.文章中の不整合な箇所の個数を答えよ.
ただし不整合なケースとは以下の2種類を指す.
- 文頭が大文字でない
- 単語の途中に大文字がある
やりかた
文意を正確に汲み取る必要がある.
注意するのは以下のケース.
- 文頭が記号である場合はその次の文字を文頭として見る
- 単語中に記号がある場合は単語の区切りとみなす
- 改行は単語の区切りとみなす
以下ソース.
int main(){ char c; bool s_start = true, w_start = true; int cnt = 0; while((c = getchar()) != -1){ if(c == '\n'){ w_start = true; } else if(c == '.' || c == '?' || c == '!'){ s_start = w_start = true; } else if(c == ' ' || c == ':' || c == ',' || c == '-'){ w_start = true; } else{ if(s_start && w_start){ if(!isalpha(c)) continue; if(islower(c)) cnt++; s_start = w_start = false; }else if(!s_start && w_start){ s_start = w_start = false; }else if(!s_start && !w_start){ if(isupper(c)) cnt++; } } } cout << cnt << endl; return 0; }
Get up! 明日のSUPER ST@R!