题目链接:加密的病历单
解题思路:
主要的问题就是如何实现所有的字符都在字母表中循环右移三个位置:先先初始化两个字符串数组,分别存取26位大小写字母。然后大写后移n为即:big[( (str[i]-‘A’)+3)%26],小写类似。
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
//为了方便实现字母向后移动三位,先初始化两个字符串数组,分别存取26位大小写字母
char big[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char small[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string str;
int len = 0;
getline(cin, str);
len = str.size();
//先进行大小写转换
for(int i=0;i<len;i++){
if(str[i]>='a'&&str[i]<='z'){
str[i] -= 32;
}else if(str[i]>='A'&&str[i]<='Z'){
str[i] += 32;
}
}
//将字母后移3位
for(int i=0;i<len;i++){
//判断大小写字母
if(str[i]>='a'&&str[i]<='z'){
str[i] = small[((str[i]-'a')+3)%26];
}
if(str[i]>='A'&&str[i]<='Z'){
str[i] = big[((str[i]-'A')+3)%26];
}
}
//倒序输出即可
for(int i=len-1;i>=0;i--){
cout<<str[i];
}
return 0;
}