Caesers Cipher (凯撒密码)

2/10/2017来源:心得技巧人气:2987

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

2、所有的字母都是大写(每个字母都有其对应的Unicode--UTF16值),不要转化任何非字母形式的字符(例如:空格、标点符号)。

3、编码思路~~A的ASCLL码值为65,M为77、Z为90. A的ROT13函数即 N=A+13 。而处理非字母字符串时只需等于自身即可。

function rot13(str){
    var arr = [];
    for(var i=0;i<str.length;i++){
      var num = str.charCodeAt(i);   // 字母转为Unicode值
      if(num>=65&&num<=90){
	if(num<=77){
	num = num + 13;           
	}
	else{num = num -13;}       //判断是否为字母,N前段+13,后-13。
      }
      arr[i] = String.fromCharCode(num);    //非字母的空格、标点符号等于自身
    }             
    return arr.join("");
}
rot13("SERR PBQR PNZC");

小知识

1、String.charCodeAt()  https://developer.mozilla.org/zh-CN/docs/Web/javaScript/Reference/Global_Objects/String/charCodeAt

    String.fromCharCode()  https://developer.mozilla.org/zh-CN/docs/Web/Javascript/Reference/Global_Objects/String/fromCharCode

而对于数组的定义方式: var arr = [];  var arr = new Array();

这两种方式是一样的,没什么区别,一种是通过直接量定义,一种是通过JavaScript的内置对象来定义。但是用哪种方式有时候要看定义什么样的数组

比如new Array(10) 和 [10]这肯定是不一样的

前者new Array(10) 是定义10个空间大小的数组,每个数组的值都为undefined 后者是定义[10]1个空间大小的数组,并且这个数组的值为10