必要的说明:本人c++新手,这是我的第四篇题解博客,希望能帮上大家
在做出这道题之前,我曾参考过码猿编程教育的程序,可是智商捉急没看懂。。。于是在学长的帮助下自己写了一个便于理解的程序,并且一贯地附上了详解
感谢学长的帮助!
题目描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2. 逆序存储(abcd -> dcba )
3. 大小写反转(abXY -> ABxy)
输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
样例输入
GSOOWFASOq
样例输出
Trvdizrrvj
我刚开始照着题目说的写程序,结果发现答案怎么也不对,后来学长告诉我这道题说错了,它说是“左移”其实是“右移”!!
各位可以对照样例输出算一下,真的是右移。。。(ಥ﹏ಥ)
代码
/*请先了解函数,字符串的相关知识*/
#include<bits/stdc++.h>
using namespace std;
char change(char ss2)//这个string函数用来转化
{
if(ss2>='a'&&ss2<='z')//小写转大写
{
ss2-='a'-'A';//大小写转换的方法,记住啦
if(ss2<='Z'&&ss2>='X')//X到Z右移3位比较特殊,单独列出来了
{
ss2='A'+(ss2-'X');//自己代几个ascll码算一算吧,括号里代表ss2减去X的ascll码后是第几个字符。。。(我也很难讲呢)
}
else//不是X到Z的字母
{
ss2+=3;//正常的右移3位
}
}
else//大写转小写
{
ss2+='a'-'A';
if(ss2<='z'&&ss2>='x')//同上
ss2='a'+(ss2-'x');
else ss2+=3;
}
return ss2;//输出已经转化的结果
}
//主函数
int main()
{
string ss;//输入
getline(cin,ss);
for(int i=ss.length()-1;i>=0;i--)
cout<<change(ss[i]);//把转化的结果倒序输出
return 0; //完结撒花ヽ(°▽°)ノ
}