虽然本题没啥难度,但是有几个注意点
1.预处理字符1,判断是否存在“+”
2.再次处理,由于字母只有大写形式,只要出现大写字母,就将其bool数组中的该字母大小写都设为true
3.出现小写字母直接用bool数组判断即可,大写字母判断“+”是否存在以及bool数组
4.其他字符,遍历字符1,若不存在直接输出即可
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <ctime>
#include<iostream>
using namespace std;
char zf[100005],zf2[100005];
bool add=false;
bool pan[200]={false};
int main()
{
int i,j,k;
cin>>zf;
int n=strlen(zf);
for(i=0;i<n;i++)
if(zf[i]=='+')
{
add=true;
break;
}
for(i=0;i<n;i++)
if(zf[i]>='A'&&zf[i]<='Z')
{
k=zf[i];
pan[k]=true;
pan[k+32]=true;
}
cin>>zf2;
int m=strlen(zf2);
for(i=0;i<m;i++)
{
if(zf2[i]>='a'&&zf2[i]<='z')
{
k=zf2[i];
if(pan[k]==false)
cout<<zf2[i];
}
else if(zf2[i]>='A'&&zf2[i]<='Z')//如果出现+号,即使字母在zf中没有出现,该大写字母也无法被打印
{
k=zf2[i];//K需重新赋值
if(pan[k]==false&&add==false)
cout<<zf2[i];
}
else
{
for(j=0;j<n;j++)
{
if(zf[j]==zf2[i])
break;
}
if(j==n)
cout<<zf2[i];
}
}
return 0;
}