凯撒密码 javascript

题目要求:

凯撒密码

(让上帝的归上帝,凯撒的归凯撒)

下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码。

移位密码也就是密码中的字母会按照指定的数量来做移位。

一个常见的案例就是ROT13密码,字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔ ‘O’,以此类推。

写一个ROT13函数,实现输入加密字符串,输出解密字符串。

所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。

提示:

charCodeAt()
String.fromCharCode()

思路

  1. 首先要找到字母

    如果出现特殊字符怎么办?我的第一想法是用正则判断是不是字母,只对字母进行替换

    用正则表达式 /\w/可以找到字母

    \w 元字符用于查找单词字符。

    单词字符包括:a-z、A-Z、0-9,以 _ (下划线) 字符。

    或者也可以使用/[A-Z]/这样的表达式

  2. 找到字母对应的charCode

  3. fromCharCode构造对应的字母

console.log('A'.charCodeAt()) //65
console.log('Z'.charCodeAt()) //90 (90+65)/2 = 77.5

1 A->14 N
2 B->15 O
...
13 M->26 Z 因此只要字母小于77.5的就将编码增加13,大于77.5的就将编码减小13即可得到对应的字母,

  1. 替换原本的字母

​ 既然使用正则那么可以使用String.replace()方法来进行替换

replace方法默认只进行一次替换,即替换第一个匹配的字符串,只用/\w/的话只会匹配第一个字母,因此要用全局匹配/g,这样就能匹配每一个字母。

replace方法常用于将某个字符串替换为另一个字符串即

'red'.replace('red','blue') //'blue'

但如果你提供的是一个替换方法,那么他将对匹配的字符串调用替换方法,传入的参数为匹配的字符串(如果使用全局匹配,那么将对每一个匹配字符串调用该替换方法),替换方法的返回值为该匹配字符串的替换字符串。

replace方法将在所有匹配字符串替换结束后返回,要注意的是replace方法并不会改变原字符串,返回值为一个经过替换后的新字符串。

代码

function rot13(str) { 
    //正则的替换是一次性替换,因此需要使用/g全局匹配,replace将对每一个匹配成功的字符串调用替换方法
    return str.replace(/\w/g, (s) => {
        var s_code = s.charCodeAt(0);
            if (s_code <= 77) {
                return String.fromCharCode(s_code + 13);
            } else{
                return String.fromCharCode(s_code - 13);
            }
        
    });
}

猜你喜欢

转载自www.cnblogs.com/wangbanshan/p/11446788.html
今日推荐