加密的病历单

加密的病历单

加密的病历单
查看提交统计提问
总时间限制: 1000ms 内存限制: 65536kB
描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2. 逆序存储(abcd -> dcba )
3. 大小写反转(abXY -> ABxy)

输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
样例输入**
GSOOWFASOq
样例输出
Trvdizrrvj

首先我们要解决三个问题,我们可以先对这三个问题进行排序,发现第二个逆序存储可以在最后的输出环节解决
接下来就是要解决相对而言更加复杂的左移,可以考虑用if语句,对dz和DZ减去3左移,对接下来的再进行考虑,可以在左移的同时大小写反转,这里可能就要用到4重if语句来判断,
这里还有一个巧妙的方法,利用数组来进行转换。

#include<iostream>
#include<cstring>
using namespace std;
char A[26]={'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'};
char a[26]={'d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
int main()
{
	char n[100];
	cin>>n;
	int longs=strlen(n);
	for(int i=0;i<longs;i++) {
		if(n[i]>='a'&&n[i]<='z')//在左移的同时进行大小写转换。
			n[i]=A[n[i]-'a'];
		else
			n[i]=a[n[i]-'A'];
	}
	for(int i=longs-1;i>=0;i--)//输出环节来实现反转。
		cout<<n[i];
	cout<<endl;
	return 0;
}

减少了多支语句的判断,便于理解

原文地址:https://www.cnblogs.com/lifehappy/p/12601210.html