#include<stdio.h>
int main(){
char b[100000],a[100];
gets(a);
gets(b);
int i,j,f=0;
int lena=strlen(a),lenb=strlen(b);
for(i=0;i<lena;i++)
if(a[i]=='+'){
f=1;
}
for(i=0;i<lena;i++){
for(j=0;j<lenb;j++){
if(a[i]>='A'&&a[i]<='Z'){
if(a[i]+32==b[j]||a[i]==b[j]){
b[j]='!';
}
}else if(a[i]==b[j]){
b[j]='!';
}
if(f==1){
if(b[j]>='A'&&b[j]<='Z'){
b[j]='!';
}
}
}
}
for(j=0;j<lenb;j++){
if(b[j]!='!')
printf("%c",b[j]);
}
}
这一题很经典,运用很多思想,与前面题目1029 旧键盘 思路相似。
字符+是上档键,决定了字母是否能大写,所以先确定上档键是否坏了,进行标记。使用二重循环,把数组1的元素和数组2的元素进行遍历比较。如果数组1元素和数组2元素一样,就进行标记(标记字符应该为一个与题目无关的字符)。如果数组1有字母,那么数组2的大小写字母都不能输出。如果数组1有上档键,数组2字母不能为大写字母。最后把没有标记的字符输出即可。