华为机试在线训练_简单密码(字符串)

简单密码

http://www.nowcoder.com/questionTerminal/7960b5038a2142a18e27e4c733855dac

/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
2020-03-15
简单密码
*/
#include<iostream>
using namespace std;
//密码(口令)变换的函数接口
string Password_Transformation(string str)
{
    //字典法:考虑两个字典,一个是明文字典 a[],另一个是明文对应的加密字典 b[]。
    //然后采用字典元素对应的方法,做加密或解密,实现方法为“字典下标对应索引以及元素匹配”。
    char a[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"}; //非必要的参照字典
    char b[] = {"bcdefghijklmnopqrstuvwxyza222333444555666777788899990123456789"}; //字符输出对应字典
    int len = str.size();
    for (int i = 0; i < len; i++)
    {
        //小写字母转数字
        if ((str[i] >= 'a') && (str[i] <= 'z'))
        {
            str[i] = b[str[i] - 'a' + 26];
        }
        //大写字母转小写
        if ((str[i] >= 'A') && (str[i] <= 'Z'))
        {
            str[i] = b[str[i] - 'A']; 
        }
        //数字不用转换,保持原样
    }
    return  str;
}
//主函数
int main()
{
    string str;
    while (getline(cin,str))
    {
        cout << Password_Transformation(str) << endl;
    }
    return 0;
}
//笨方法:为每一种情况写一个 if 判别语句,对应输出结果即可,
大厂面试 文章被收录于专栏

分享有用的面试经历,倾吐有心的面试感悟,讲述有趣的面试故事,以飨读者。 常用语言是C++,编程力求规范整洁,题解清晰完整,像写诗一样去写代码。 本专栏文章系「人工智能安全」(微信公众号)原创,转载请联系本文作者。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师,期待与你的思想交流碰撞出智慧的花火。

全部评论
好思路,密码本的概念整理出来了
2 回复 分享
发布于 2022-05-31 21:19
在执行if判断时,如果先执行了大写转小写,再执行小写转大写,会有错误的,请问该解决原理是啥呢
点赞 回复 分享
发布于 2022-06-05 14:37
人才
点赞 回复 分享
发布于 2022-08-13 22:17
数字部分和大写字母部分我觉得没啥必要用密码本,但是小写字母部分用密码本好像挺方便
点赞 回复 分享
发布于 2022-12-05 20:44 广东
不太明白这样写的用意,直接mapping表一一映射不就完了?这样写的目的是为了体现代码功底?
点赞 回复 分享
发布于 2023-03-01 16:30 上海

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
65 4 评论
分享
牛客网
牛客企业服务