美文网首页Web前端之路让前端飞程序员
FreeCodeCamp筆記之:Caesars Cipher 凱

FreeCodeCamp筆記之:Caesars Cipher 凱

作者: delphuy | 来源:发表于2017-09-28 11:01 被阅读70次

    題目:

    凯撒密码
    (让上帝的归上帝,凯撒的归凯撒)
    下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。
    移位密码也就是密码中的字母会按照指定的数量来做移位。
    一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
    写一个ROT13函数,实现输入加密字符串,输出解密字符串。
    所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
    当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
    这是一些对你有帮助的资源:
    String.charCodeAt()
    String.fromCharCode()

    解法:

    看完就是一臉懵逼,再看再懵逼....
    於是拿了草稿紙列了幾條來找規律,又仔細閱讀了charCodeAt(),fromCharCode() 两个方法;
    charCodeAt() 是返回字符的Unicode 值,字母A的值是 65,字母Z 的值是90;
    fromCharCode() 刚好和上一个相反,是将数值转化为字母;
    附:ASCII码对照表
    尝试写了如下代码:
    (为毛直接写的代码会那么丑,这个富文本编辑器也没有提供插入代码的功能):

    -- function rot13(str) { // LBH QVQ VG! // 请把你的代码写在这里
    var arr=str.split(''); // 将字符以空格拆分
    for(var i=0;i=65&&a<=90){ //判断字符是不是字母
    if(b<65){ //不是字母
    arr[i]=String.fromCharCode(a);
    } else{
    arr[i]=String.fromCharCode(b);
    }
    } else{
    arr[i]=arr[i];
    } str=arr.join(""); // 将字符加空格合并
    }
    return str;
    }
    rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码

    执行之后,不出意外的报错了,于是百度了别人的答案,发现当 a 不是字母的时候,没有位移,我不是很懂这里为什么要 a+13,修正后代码如下:

    function rot13(str) { // LBH QVQ VG!
    // 请把你的代码写在这里
    var arr=str.split(''); // 将字符以空格拆分
    for(var i=0;i<arr.length;i++){
    var a=arr[i].charCodeAt(0);//加密字符编码
    var b=a-13; //位移13个位置
    if(a>=65&&a<=90){ //判断字符是不是字母
    if(b<65){ //不是字母
    arr[i]=String.fromCharCode(a+13);
    } else{
    arr[i]=String.fromCharCode(b);
    }
    } else{
    arr[i]=arr[i];
    } str=arr.join(""); // 将字符加空格合并
    }
    return str;
    }
    rot13("SERR PBQR PNZC"); // 你可以修改这一行来测试你的代码

    执行结果居然是: FREE CODE CAMP 。。。。

    相关文章

      网友评论

        本文标题:FreeCodeCamp筆記之:Caesars Cipher 凱

        本文链接:https://www.haomeiwen.com/subject/fpemextx.html