【模拟】拼写检查

二、拼写检查

【问题描述】

      路人乙的上司非常的NC,NC的上司分配了路人乙一个非常NC的任务,那就是写一

个拼写检查程序,这样上司就可以避免一些非常NC的拼写错误。路人乙的上司指出了以

下几种情况算是拼写错误:

      1.句子的第一个字母用了小写。

      2.不是单词的第一个字母用了大写。

      一个单词是字母的序列,不包含其他任何字符,或行尾结束符用句号,问号或叹号表

示句子的结束。

    【输入】

        输入为文字包含大小写字母(A-Z,a-z)、标点符号(.!?)、空格。文字长度不超过10000

    【输出】

        输出文字中错误的数量

    【样例输入】

     This sentence iz correkt! -It Has,No mista;Kes et oll.But there are two BIGmistakes in this one! and here is one more.

【样例输出】

     3


一开始担心坑爹,其实没有坑爹。。自己坑自己了。

其实还是有小坑爹,根据题意,没有其他的符号,但是其实有各种符号。。。把它当做空格就行了。


处理方法是:

用n记录当前字符,p记录前一字符。用一个newsentence标志新句子的开始,每遇到?!。就把它设为true,遇到字母就设为false

如果当前是大写字母,前一字符是任意字母。则说明句中出现大写字母,答案加1

如果是小写字母,且这是一个新句子。说明句首用了小写字母,答案加1

#include <cstdio>

#define ISBIG(a) ((a)<='Z'&&(a)>='A')
#define ISSMA(a) ((a)<='z'&&(a)>='a')

int main()
{
	freopen("spell.in","r",stdin);
	freopen("spell.out","w",stdout);
	char n;
	char p;
	long ans = 0;
	bool newsentence=true;
	while (scanf("%c",&n)==1)
	{
		if (ISBIG(n)&&(ISSMA(p)||ISBIG(p)))
		{
			ans ++;
		}
		else if (ISSMA(n)&&newsentence)
		{
			ans ++;
		}
//		else if ((n==' '||n=='\n')&&(ISSMA(p)||ISBIG(p)))
//		{
//			ans ++;
//		}
		
		if (ISBIG(n)||ISSMA(n))
		{
			newsentence = false;
		}
		else if (n=='.'||n=='!'||n=='?')
		{
			newsentence = true;
		}
		p = n;
	}
	printf("%ld",ans);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值