C/C++编程学习 - 第9周 ④ 加密的病历单

题目链接

题目描述

小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。

在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。

经过研究,小英发现了如下加密规律(括号中是一个 “原文 -> 密文” 的例子)

  1. 原文中所有的字符都在字母表中被循环右移了三个位置( abz -> dec )
  2. 逆序存储(abcd -> dcba )
  3. 大小写反转(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;
}

猜你喜欢

转载自blog.csdn.net/qq_44826711/article/details/113095766