B2116 加密的病历单

前置芝士

isupper(char c):判断 $c$ 是否大写字母。

islower(char c):判断 $c$ 是否小写字母。

toupper(char c):返回 $c$ 的大写形式。

tolower(char c):返回 $c$ 的小写形式。

上面四个函数都在 <cctype>

reverse(iterator a, iterator b):将 $a$ 到 $b$ 的序列翻转

<algorithm>

思路

将加密过程反过来,即为解密过程。

但题目说反了,根据样例可知,加密时应该是左移 3 位,解密时才是右移 3 位。

遍历字符串,把大写转成小写,小写转成大写。

reverse 逆序存储,最后右移 3 位输出即可。

注意 x,y,z 右移要特判。

代码

#include <iostream>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
char s[101];int l;
int main()
{
    cin >> s;l = strlen(s);
    for(int i = 0;i < l;++i)
        if(isupper(s[i])) s[i] = tolower(s[i]);
        else if(islower(s[i])) s[i] = toupper(s[i]);
    reverse(s, s + l);
    for(int i = 0;i < l;++i)
    {
        switch(s[i])
        {
            case 'x': cout << 'a';break;
            case 'X': cout << 'A';break;
            case 'y': cout << 'b';break;
            case 'Y': cout << 'B';break;
            case 'z': cout << 'c';break;
            case 'Z': cout << 'C';break;
            default : cout << char(s[i] + 3);break;
        }
    }
    return 0;
}
posted @ 2021-07-19 08:33  5k_sync_closer  阅读(33)  评论(0编辑  收藏  举报  来源