调试了一会就写出来了
思想
对三个原始字符串和破译字符串进行处理:去掉标点符号,字母全部转为大小写。
如果破译字符串可以由三个原始字符串任意顺序拼接而成,那么就输出yes,否则就输出NO
#include<bits/stdc++.h>
using namespace std;
string s1, s2, s3;
int n;
//对三个原始字符串进行处理:
void sovel(string& str) //引用返回
{
//去掉标点符号,并且转为小写
string s;
for (int i = 0; i < str.size(); i++)
{
if (isalpha(str[i]))
{
s += tolower(str[i]);
}
}
str = s; //因为是引用,所以这里把str被处理之后的字符串覆盖即可
}
int main() {
cin >> s1 >> s2 >> s3;
sovel(s1), sovel(s2), sovel(s3);
cin >> n;
while (n--)
{
string passwd; cin >> passwd;
//对破译字符串进行处理
string passwd2;
for (int i = 0; i < passwd.size(); i++)
{
if (isalpha(passwd[i]))
{
passwd2 += tolower(passwd[i]);
}
}
//判断破译字符串是否可以由三个原始字符串任意顺序拼接而成
if (passwd2 == s1 + s2 + s3 || (passwd2 == s1 + s3 + s2) || (passwd2 == s2 + s1 + s3) || (passwd2 == s2 + s3 + s1)
|| (passwd2 == s3 + s1 + s2) || (passwd2 == s3 + s2 + s1))
{
cout << "YES" << endl;
}
else cout << "NO" << endl;
}
return 0;
}