蓝桥杯 破译密码 一次过 知识点:字符串处理

68 阅读1分钟

7.破译密码 - 蓝桥云课 (lanqiao.cn)

调试了一会就写出来了

思想

对三个原始字符串和破译字符串进行处理:去掉标点符号,字母全部转为大小写。

如果破译字符串可以由三个原始字符串任意顺序拼接而成,那么就输出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;
}

image.png