题解 | #字符串加解密# (核心5行,简单好懂)

看了一些题解,要不直接翻译密码……(那还让你算什么),要不写一大堆,就把自己的发出来吧

核心逻辑是对每个字符进行偏移,通过取余来保证不会越界,所有的偏移都向右进行,保证取余数之后一定是正数

加密的时候字母和数字都向右偏移1位,解密的时候字母向右偏移25位(向左1位)数字向右偏移9位(向左1位)

以数字为例(第8行),对每个数字,增加偏移之后计算和'0'的差值,将这个差值对10取余数,这样就不会越界

比如字符'5'此时变成了数字6,字符'9'就变成了数字0

最后加上字符'0',把数字还原回字符,上面的数字6就变成了字符'6',数字0就变成了字符'0'

#include <iostream>
#include <string>
using namespace std;

string f1(string s, int offset_alpha, int offset_digit) {
    for (auto &c : s) 
        if (isdigit(c))
            c = (c + offset_digit - '0') % 10 + '0';
        else
            c = (c + offset_alpha - (isupper(c) ? 'A' : 'a')) % 26 + (isupper(c) ? 'a' : 'A');
    return s;
}

int main() {
    string s, t;
    getline(cin, s);
    getline(cin, t);
    cout << f1(s, 1, 1) << endl;
    cout << f1(t, 25, 9) << endl;
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务