旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在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;
}