2013
12-09

# Spell checker

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.

contains a text that consists of capital and small letters of the Latin alphabet (A�Z, a�z), punctuation marks (.,;:-!?) and spaces.

You should output a number of mistakes in the input text in one line.

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.

3

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

isalpha int isalpha（int ch）判断字符ch是否为英文字母，当ch为英文字母a-z或A-Z时，在标准c中相当于使用“isupper(ch)||islower(ch)”做测试，返回非零值(不一定是1)，否则返回零

isupper extern int isupper(int c); 判断字符c是否为大写英文字母 当参数c为大写英文字母(A-Z)时，返回非零值，否则返回零。

islower int islower(int c) 检查参数c是否为小写英文字母。若参数c为小写英文字母，则返回TRUE，否则返回NULL(0)。

1. 约瑟夫也用说这么长……很成熟的一个问题了，分治的方法解起来o(n)就可以了，有兴趣可以看看具体数学的第一章，关于约瑟夫问题推导出了一系列的结论，很漂亮