题目链接在此。
思路
由于是键盘,所以字母的大小写是不区分的,符合常理。
本题需要注意两点:
1. 如何在不区分大小写的情况下判断在s1中出现的字符在s2中没有出现过
2. 如何做到同一字符只输出一次,并且英文字母只输出大写形式
以上两点也是解题的思路。
做法:
1. 遇到小写字母直接转换成大写
2. 遍历s1的每个字符c1的过程中遍历s2的每个字符c2,如果c1==c2则说明该字符在s1和s2中都出现过;如果不相等,则继续枚举s2的下一个字符。 如果对于c1在s2中无法找到相应的c2与之相等,并且c1没有输出过,则输出
3. 解决上面一点的问题:如何判断有没有输出过。用一个bool型数组HashTable[128](ASCII总共有128个)记录输出的情况
AC代码
#include<stdio.h>
#include<string.h>
int main(){
char s1[81], s2[81];
bool isPrint[128] = {false};
scanf("%s",s1);
scanf("%s",s2);
for(int i = 0; i < strlen(s1); i++){
char c1, c2;
int j;
for(j = 0; j < strlen(s2); j++){
c1 = s1[i];
c2 = s2[j];
if(c1 >= 'a' && c1 <= 'z') c1 -= 32;
if(c2 >= 'a' && c2 <= 'z') c2 -= 32;
if(c1 == c2) break;
}
if(j == strlen(s2) && isPrint[c1] == false){
printf("%c",c1);
isPrint[c1] = true;
}
}
}