【c++加密的病历单】做题感想兼教

必要的说明:本人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; //完结撒花ヽ(°▽°)ノ 
}

猜你喜欢

转载自blog.csdn.net/janesilver/article/details/80815659
今日推荐