PAT乙级--1033

0、重点

0.1 toupper()对于非字母直接原样返回

在使用toupper()函数时,我担心非字母字符导致报错,所以再使用之前还加了是否为字母的判断。

但是,我发现ln在使用该函数时,没有判断是否为字母,这让我好奇如果不是字母会产生怎样的结果。

首先,其实现方法如下:

int tolower(int c)
{
	if ((c >= 'A') && (c <= 'Z'))
		return c + ('a' - 'A');
	return c;
}
 
 //如果为字母,则变为大写字母
 //不为字母,则不改变值并返回
int toupper(int c)
{
	if ((c >= 'a') && (c <= 'z'))
		return c + ('A' - 'a');
	return c;
}

也就是,如果是’a’,则返’A’;如果是’+’,则还是返回’+’。

故在下题中,不用判断是否为字母

0.2 cin无法接受空白字符,要使用getline()

同时该题的一个坑:
题目只保证了给出的第二个字符串非空,但是没有说第一个字符串 ,所以输入的时候需要用getline(cin,b),用cin>>a>>b;会导致测试点2不通过
1. c++:用户输入的读取

1、题目

1033 旧键盘打字 (20 分)

2、代码

题目简单,直接放ln的代码:

#include <iostream>
#include <cctype>

using namespace std;

int main(int argc, char **argv)
{
    string bad,should;
    getline(cin,bad);
    getline(cin,should);

    for(int i=0;i<should.length();i++){
        if(bad.find(toupper(should[i]))!=string::npos) continue;
        if(isupper(should[i]) && bad.find('+')!=string::npos) continue;
        cout<<should[i];
    }



    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值