小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
如果是x~z,含x和z里(不区分大小写)的字母,他左移三个字母就到了abc,也就是将ASCII-23
如果是a~w,含a和w里(不区分大小写)的字母,他左移三个字母是正常的,也就是将ASCII+3
2. 逆序存储(abcd -> dcba )
按照正常的顺序存的话:s2[i] = s1[i];就可以了
可是要求是逆序存:len表示长度,i表示目前的位置,输入从0开始(待会要-1)
s2[len-i-1] = s1[i];就可以了
3. 大小写反转(abXY -> ABxy)
s[i] 如果是小写的话:s2[len-i-1] = s1[i]-'a'+'A';从小写变大写
s[i] 如果是大写的话:s2[len-i-1] = s1[i]-'A'+'a';从大写变小写
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
char a[50], b[50];
int len = 0;
int main(){
scanf("%s", a);
while(a[len] != ' '){
len++;
}
for(int i = 0;i < len;i++){
if(a[i] >= 'x' && a[i] <= 'z'){
b[len-i-1] = a[i] - 'a' + 'A' - 23;
}else if(a[i] >= 'a' && a[i] <= 'w'){
b[len-i-1] = a[i] - 'a' + 'A' + 3;
}else if(a[i] >= 'X' && a[i] <= 'Z'){
b[len-i-1] = a[i] + 'a' - 'A' - 23;
}else if(a[i] >= 'A' && a[i] <= 'W'){
b[len-i-1] = a[i] + 'a' - 'A' + 3;
}
}
for(int i = 0;i < len;i++){
printf("%c", b[i]);
}
return 0;
}