Problem Description
The boss of a firm that you are employed with is dissatisfied with the text processor Word. He wants you to write a better text processor by tomorrow. The interface of the new processor should be clearer, there should be more options, and the resulting text should be more beautiful. You told the boss that this work would take not less than four days. Then your boss asked you to begin with a spell checking program. This program should check capital and small letters. It should detect a mistake in each of the following cases.
1) The first letter in a sentence is small.
2) A capital letter is not the first letter in a word.
A word is a sequence of letters not containing any other symbols or ends of line.
The end of a sentence is defined a full stop, a question-mark or an exclamation mark.
Input
contains a text that consists of capital and small letters of the Latin alphabet (A–Z, a–z), punctuation marks (.,;:-!?) and spaces.
Output
You should output a number of mistakes in the input text in one line.
Sample Input
This sentence iz correkt! -It Has,No mista;.Kes et oll.
But there are two BIG mistakes in this one!
and here is one more.
Sample Output
3
Answer
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
int word=0,sentence=0,mistakes=0,c;
while( ( c=getchar() ) != EOF )
{
if(word==0)
{
if(isalpha(c)) // word头一个字母
word=1;
}
else
{
if(isalpha(c)) // word中不是头一个字母
{
if(isupper(c))
mistakes++;
}
else
word=0;
}
if(sentence==0)
{
if(isalpha(c)) // 句首的第一个字母
{
sentence=1;
if(islower(c))
mistakes++;
}
}
else if(c=='.' || c=='?' || c=='!') // 遇到结束标点 本句结束
sentence=0;
}
cout<<mistakes<<endl;
return 0;
}