当前位置: 代码迷 >> 综合 >> 计蒜客:T1112 加密的病历单
  详细解决方案

计蒜客:T1112 加密的病历单

热度:53   发布时间:2024-01-26 16:29:35.0

题目链接:加密的病历单

解题思路:

主要的问题就是如何实现所有的字符都在字母表中循环右移三个位置:先先初始化两个字符串数组,分别存取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;}