C/C++编程学习 - 第9周 ④ 加密的病历单
作者:互联网
题目描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个 “原文 -> 密文” 的例子)
- 原文中所有的字符都在字母表中被循环右移了三个位置( abz -> dec )
- 逆序存储(abcd -> dcba )
- 大小写反转(abXY -> ABxy)
输入格式
原文。(长度小于 50 且只包含大小写字母)
输出格式
输出加密后的字符串。
Sample Input
GSOOWFASOq
Sample Output
Trvdizrrvj
思路
按照题中所给的加密规律,一步一步进行加密,即可得到加密后的密文。看不懂题的话,可以拿样例试一下,很快就明白了。
C++代码1:
#include<iostream>
using namespace std;
string s;
int len;
int main()
{
cin >> s;
len = s.size();
for(int i = 0; i < len; ++i)
{
if(s[i] >= 'a' && s[i] <= 'z')//对小写字母进行处理
{
s[i] = 'a' + (s[i] - 'a' + 3) % 26;
s[i] -= 32;//相对于'a'的位置移动三位,如果该字母移动之后的位置大于最后一个字母'z'相对于'a'的位置,就变成还是从'a'移动,其相对位置就变了对26取余,移动之后再把小写字母变成大写字母
}
else if(s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = 'A' + (s[i] - 'A' + 3) % 26;
s[i] += 32;//相对于'A'的位置移动三位,如果该字母移动之后的位置大于最后一个字母'Z'相对于'A'的位置,就变成还是从'A'移动,其相对位置就变了对26取余,移动之后再把大写字母变成小写字母
}
}
for(int i = len - 1; i >= 0; i--)
cout << s[i];//最后逆序输出
cout << '\n';
return 0;
}
C++代码2:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
while(cin >> str)
{
int len = str.length();
for(int i = 0; i < len; i++)
{
if(str[i] == 'z') str[i] = 'c';
else if(str[i] == 'y') str[i] = 'b';
else if(str[i] == 'x') str[i] = 'a';
else if(str[i] == 'Z') str[i] = 'C';
else if(str[i] == 'Y') str[i] = 'B';
else if(str[i] == 'X') str[i] = 'A';
else str[i] += 3;
}
for(int i = 0; i < len; i++)
{
if(str[i] >= 97 && str[i] <= 122) str[i] -= 32;
else if(str[i] >= 65 && str[i] <= 90) str[i] += 32;
}
for(int i = len - 1; i >= 0; i--)
cout << str[i];
cout << endl;
}
return 0;
}
标签:病历,加密,int,编程,C++,else,len,str,小英 来源: https://blog.csdn.net/qq_44826711/article/details/113095766