二、拼写检查
【问题描述】
路人乙的上司非常的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;
}