Web前端之路让前端飞程序员

FreeCodeCamp筆記之:Caesars Cipher 凱

2017-09-28  本文已影响70人  delphuy

題目:

凯撒密码
(让上帝的归上帝,凯撒的归凯撒)
下面我们来介绍风靡全球的凯撒密码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 。。。。

上一篇下一篇

猜你喜欢

热点阅读