题解 | 字符串加解密

字符串加解密

https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a


#include <cctype>
#include <iostream>
#include <iterator>
#include <ostream>
#include <string>
using namespace std;

/*
前情提要:
题目是字符串的加解密,题目描述也是一样的.
可能是中等难度的题目吧,题目描述里多多少少有些坑的.虽然复杂,但是多搞些测试样例把问题复现就能解决
对于加密,有两个规则:
1.对于密码中的字母,按照字母表的顺序,向后移动一位,同时改变大小写,
1.1.Z转换为a,因此遇到Z直接改成a就行.
2.对于密码中的数字,递增1,如果是9则是0.
*/
// 加密接口
void Encript(string& pwd) 
{
    for (char& ch : pwd) {
        if (isalpha(ch)) {
            // 0.特殊情况,遇到大写的Z,换成a
            if (ch == 'Z') 
                ch = 'a';
            else if (ch == 'z') 
                ch = 'A';
            else {
                // 1.后移一位
                ch++;
                // 2.改变大小写
                if (islower(ch)) 
                    ch = toupper(ch);
                else 
                    ch = tolower(ch);
            } 
        } else if (isdigit(ch)) {
            // 检测到数字
            if (ch == '9') ch = '0';
            else ch++;
        }
    }
}

/*
对于解密,
1.对于密码中的字母,按照字母表的顺序,先改变大小写,再向前移动一位
2.对于密码中的数字,递减1,如果是0则是9
*/
void Decript(string& pwd) 
{
    for (char& ch : pwd) {
        if (isalpha(ch)) {
            // 0.特殊情况,遇到小写的a,换成Z
            if (ch == 'a') 
                ch = 'Z';
            else if (ch == 'A') 
                ch = 'z';
            else {
                // 1.改变大小写
                if (islower(ch)) 
                    ch = toupper(ch);
                else 
                    ch = tolower(ch);
                // 2.后移一位
                ch--;
            } 
        } else if (isdigit(ch)) {
            // 检测到数字
            if (ch == '0') ch = '9';
            else ch--;
        }
    }
}

int main() 
{
    string s; // 明文
    cin >> s; 
    Encript(s); // 加密接口
    cout << s << endl; // 输出密文

    string t; // 密文
    cin >> t; 
    Decript(t);
    cout << t << endl; // 输出明文
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务