ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT 凯撒密码 (20 分)

2022-01-12 15:05:12  阅读:305  来源: 互联网

标签:26 20 字母 样例 offset PAT include 凯撒 输入


为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。

输入格式:

输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。

输出格式:

输出加密后的结果字符串。

输入样例1:

Hello Hangzhou
2

输出样例1:

Jgnnq Jcpibjqw

输入样例2:

a=x+y
-1

输出样例2:

z=w+x

本题关键在于对a/A的大小写字母的循环替换

那么我们如何替换呢?首先,用当前字母减去其对应的大小写最前位,大写字母'A',小写-‘a',这样我们就得到了该字母的位置(位于第几个),然后让该字母加上偏移量x。注意当加上x时可能会超过26个字母,所以需要%26,这样后再加上他的最前位,结果就出来了。

细节:如果偏移量x为负数的话,那么我们通过简单的数字循环可以知道,-1等同于25,所以只要找到x对应在0-26的位置即可,所有让它一直加上26直到它为正数。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    string s;
    int x;
    getline(cin,s);
    cin >> x;
    while(x<0) x += 26;
    if(x>26) x %= 26;
    for(auto &c:s)
    if(c>='a'&&c<='z') c=(c-'a'+x )%26+'a';
    else if (c>='A'&&c<='Z') c=(c-'A'+x)%26+'A';
    cout << s <<endl;
    
    
    
    
    return 0;
}

标签:26,20,字母,样例,offset,PAT,include,凯撒,输入
来源: https://blog.csdn.net/m0_61837058/article/details/122453614

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有