C++信息学奥赛1137:加密的病历单

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	string arr;
	// 输入一行字符串
	getline(cin, arr);
	string btt;
	for(int i=arr.length()-1;i>=0;i--){
		char a=arr[i]+3; // 对当前字符进行加密,向后移动三位
		if(arr[i]>=88 and arr[i]<=90) { // 如果当前字符是'X'、'Y'、'Z'中的一个
			a=arr[i]-23; // 解密时向前移动23位
		}else if(arr[i]>=120 and arr[i]<=122){ // 如果当前字符是'x'、'y'、'z'中的一个
			a=arr[i]-23; // 解密时向前移动23位
		}
		if(a>90){ // 如果加密后的字符超过了大写字母范围
			a-=32; // 将其转换为小写字母
			cout<<a; // 输出解密后的字符
		}else{
			a+=32; // 将加密后的字符转换为大写字母
			cout<<a; // 输出解密后的字符
		}
	}
	return 0;
}

该段代码实现了一个简单的字符加密和解密功能。首先,通过getline(cin, arr)语句从标准输入读取一行字符串。然后,从字符串的最后一个字符开始,向前遍历。对于每个字符,使用char a=arr[i]+3将其往后移动三位。如果字符是大写字母'X'、'Y'、'Z'中的一个,则将其解密后的字符设为原字符减去23;如果字符是小写字母'x'、'y'、'z'中的一个,则同样将其解密后的字符设为原字符减去23。如果加密后的字符超过了大写字母范围,则将其转换为小写字母;否则,将其转换为大写字母。最后,输出解密后的字符。

相关推荐
云泽80840 分钟前
笔试算法 - 双指针篇(二):四大经典求和题型 + 有效三角形计数问题
c++·算法
techdashen1 小时前
Cloudflare 如何把一个大型代理拆成三个小服务来提升可靠性
开发语言·rust
geovindu1 小时前
go: Chain of Responsibility Pattern
开发语言·设计模式·golang·责任链模式
十五年专注C++开发2 小时前
WaitingSpinnerWidget: 一个高度可配置的自定义Qt等待加载动画组件
开发语言·c++·qt·waitingspinner
qeen872 小时前
【数据结构】树的基本概念及存储
c语言·数据结构·c++·学习·
Java小生不才2 小时前
spring AI文生图
java·人工智能·spring ai
苍煜2 小时前
ThreadPoolExecutor线程池终极全解:同步异步判定+SpringBoot生产实战
java·开发语言·spring boot
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:种树
c++·算法·贪心·csp·信奥赛·区间贪心·种树
fengfuyao9852 小时前
EWT(经验小波变换)MATLAB实现与应用
开发语言·matlab
hi_ro_a2 小时前
C++ 哈希表封装 unordered_map /unordered_set
数据结构·c++·算法·哈希算法