HDU 1360 Spell checker

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值