PAT(B) - 1029. 旧键盘(20)


旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。

输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI


分析:题目不难理解,一个简单的字符串比较。由于题目最后输出的字母都是大写,所以刚开始输入两个字符串后可以直接转成大写,方便后序的比较。之后用 string 类的 find 函数依次查找字符。 定义一个string c用来存储结果。

1.输入两个string字符串a、b

2.将a、b统一转换成大写字符串,方便后序的比较。(由于string类里没有现成的函数,所以需要自己实现一下)

3.依次比较a串中的每个字符,判断是否在b串中出现,这里用find即可。注意返回值,如果没找到返回string::npos

4.如果没有找到,再和字符串c比较,如果c中已经出现过这个字符,就不再输出。如果没有出现,就添加到c的末尾。(若不考虑这步,按照样例的输入程序会输出7TIIIIII)

5.输出字符串c



AC代码:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string a;
    string b;
    string c;

    cin >> a >> b;

    int len_a = a.length();
    int len_b = b.length();

    for ( int i = 0; i < len_a; i++ ) {
        if ( a[i] >= 'a' && a[i] <= 'z' ) {
            a[i] = a[i] - 32;
        }
    }

    for ( int i = 0; i < len_b; i++ ) {
        if ( b[i] >= 'a' && b[i] <= 'z' ) {
            b[i] = b[i] - 32;
        }
    }

    for ( int i = 0; i < len_a; i++ ) {
        char ch = a[i];
        int found = b.find( ch );
        if ( found == string::npos ) {
            int flag = c.find( ch );
            if ( flag == string::npos ) {
                c += ch;
                cout << ch;
            }
        }
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值