#include <iostream>
#include<string>
using namespace std;
int main()
{
string a1;
string a2;
cin>>a1;
cin>>a2;
bool flag=false;
for(int i=0;i<a1.size();i++) //+号是坏的
{
if(a1[i]=='+')
{
flag=true;
break;
}
}
int i,j;
bool get;
for(i=0;i<a2.size();i++)
{
get=true;
for(j=0;j<a1.size();j++)
{
if(a2[i]==a1[j]) //如果两个相同
{
get=false;
break;
}
else if (a2[i] - a1[j] == 32) //如果是大小写的关系
{
if(isalpha(a2[i])&&isalpha(a1[j]))
{
get=false;
break;
}
}
}
if(get) //如果不存在上述情况
{
if(flag) //如果不存在上述情况但是+键坏了
{
if(a2[i]>='A'&&a2[i]<='Z')
{}
else
cout<<a2[i];
}
else
{
cout<<a2[i];
}
}
}
cout<<endl;
return 0;
#include<string>
using namespace std;
int main()
{
string a1;
string a2;
cin>>a1;
cin>>a2;
bool flag=false;
for(int i=0;i<a1.size();i++) //+号是坏的
{
if(a1[i]=='+')
{
flag=true;
break;
}
}
int i,j;
bool get;
for(i=0;i<a2.size();i++)
{
get=true;
for(j=0;j<a1.size();j++)
{
if(a2[i]==a1[j]) //如果两个相同
{
get=false;
break;
}
else if (a2[i] - a1[j] == 32) //如果是大小写的关系
{
if(isalpha(a2[i])&&isalpha(a1[j]))
{
get=false;
break;
}
}
}
if(get) //如果不存在上述情况
{
if(flag) //如果不存在上述情况但是+键坏了
{
if(a2[i]>='A'&&a2[i]<='Z')
{}
else
cout<<a2[i];
}
else
{
cout<<a2[i];
}
}
}
cout<<endl;
return 0;
}
总结:一开始我只写了一个简单的两重for虚循环,其实这是三种情况,而“是否存在+”的这种情况我们可以简单地把它拿出来考虑,因为并不是只要+键坏了就输不出来。我之前也没有想到用一个状态量去代表逐个分析然后分析一个就输出一个,显然,这样是比较方便的。所以在第二个for循环中只考虑两种情况就可以break;(break是跳出当层循环,而continue是结束本次循环,我当时懵逼了),判断完这两种情况之后,再来判断在有+号和无+号情况下的输出。
结论:我真蠢,思维不够严密,虽然知道思路但是写出来往往还是比较麻烦的,要么就又累赘要么就没有考虑完整。。。多写题锻炼思维的严密性吧。