题目:click me~
题意:给出两个字符串,第一个为原本想要输出的字符串,第二个是坏键盘实际输出的字符串。
解题思路:
需要解决两个问题:
1.如何在英文字母不区分大小写的情况下判断哪些字符在第一个串中出现却没在第二个串中出现。
2.如何保证一个字符只输出一次,且英文字母全用大写。
步骤一:对于第一个问题,枚举第一个字符串中的字符,对当前枚举字符c1,枚举第二个字符串中的字符c2,若遇到小写字母,则全部转换成大写。之后判断c1和c2是否相等,若相等,说明在第二个字符串中出现过,不予输出;若不相等,继续枚举下一个c2,若对于c1无法在第二个字符串中找到相等的,则需要输出c1.
步骤二:对于第二个问题,设置一个hashtable【128】表示字符是否已经被输出。
code
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main() {
char str1[100], str2[100];
bool hashta[128] = { false };
cin >> str1 >> str2;
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0;i < len1;i++) {
char c1, c2;
int j;
for (j = 0;j < len2;j++) {
c1 = str1[i];
c2 = str2[j];
if (c1 >= 'a'&&c1 <= 'z')c1 = c1 - 32;
if (c2 >= 'a'&&c2 <= 'z')c2 = c2 - 32;
if (c1 == c2)break;
}
if (j == len2 && hashta[c1]==false) {//hashta下标直接是字符的ascii码值
cout << c1;
hashta[c1] = true;
}
}
return 0;
}