题目大意:
一块键盘上有机会键损坏了,输入一段文字时,对应的键不会显示,给出一段输入的文字和一段输出的文字,判断坏掉的键是哪几个
思路:
1)寻找那些键坏掉即找见第一个字符串中的哪些字符在第二个字符串中没有输出,字母不区分大小写,对于字母可以统一转换成大写或者小写。空格以下划线的形式给出,也需要判断。
2)保证每个字符仅输出一次,设立hash数组,HashTable[128],表示字符是否已经输出,如果HaheTable[c]==false表示c没有输出,则可以输出,如果为true,则表示不用输出。
AC代码:
//PAT_A 1084
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
char str1[100], str2[100];
bool HashTable[128] = { false };
(void)scanf("%s", str1);
(void)scanf("%s", str2);
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) {
int j;
char c1, c2;
for (j = 0; j < len2; j++) {
c1 = str1[i];
c2 = str2[j];
if (c1 >= 'a' && c1 <= 'z')c1 -= 32;
if (c2 >= 'a' && c2 <= 'z')c2 -= 32;
if (c1 == c2)break;
}
if (j == len2 && HashTable[c1] == false) {//第二个字符串中没有出现c1并且c1没有输出过
printf("%c", c1);
HashTable[c1] = true;
}
}
}