【PAT乙级】1029 旧键盘 (20分)

    科技2022-07-11  104

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

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

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

    输入样例:

    7_This_is_a_test _hs_s_a_es

    输出样例:

    7TI

    首先将两个字符串的小写字母全部变为大写格式,遍历第一个字符串,相对应数组赋值为1,在遍历第二个字符串,相对应数组赋值为2,便利数组如果值为1,则是坏键,输出,但重要的一点是坏键不能重复输出,所以在赋值相对应数组另一个值,使它不满足重复输出的条件。

    #include<iostream> using namespace std; int a[256]; int main(){ string s1, s2; cin >> s1 >> s2; for(int i=0; i<s1.length(); i++){ if(s1[i]>='a'&&s1[i]<='z') s1[i]=s1[i]-'a'+'A'; a[s1[i]]=1; } for(int i=0; i<s2.length(); i++){ if(s2[i]>='a'&&s2[i]<='z') s2[i]=s2[i]-'a'+'A'; a[s2[i]]=2; } for(int i=0; i<s1.length(); i++){ if(a[s1[i]] == 1){ cout << s1[i]; a[s1[i]]=2; } } }

    柳神代码

    #include <iostream> #include <cctype> using namespace std; int main() { string s1, s2, ans; cin >> s1 >> s2; for (int i = 0; i < s1.length(); i++) if (s2.find(s1[i]) == string::npos && ans.find(toupper(s1[i])) == string::npos) ans += toupper(s1[i]); cout << ans; return 0; }

    使用了好多函数,之前没有使用过 find()函数 string::npos find函数在找不到指定值的情况下会返回string::npos toupper() 将小写字母变为大写字母

    Processed: 0.009, SQL: 8