字母 |
UNIcode编码 |
A |
65 |
M |
77 |
N |
78 |
Z |
90 |
unicode编码范围 |
对应字符 |
处理 |
64<X<78 |
A-M |
+ 13 |
78<=X<=90 |
N-Z |
-13 |
X<=64 |
A-Z以外 |
不变 |
90<X |
A-Z以外 |
不变 |
解题思路:
- 将str内小写字母更换为大写(此题条件均无小写)
- 由上列表可得出,Unicode在何区间需要做出调整,是+13,还是-13,还是不变?
-
String.charCodeAt()
将字符变换为Unicode;
-
String.fromCharCode(num)
将unicode还原为字符
- 建立for循环
-
Arr.join("")
将数组集合为字符串;
答案:
function rot13(str) { // LBH QVQ VG!
arr = str.toUpperCase().split(""); // to upper case of str,and split str to a array - arr;
var Arr =[];
var newstr = "";
var num=0;
for(var i=0;i<str.length;i++){
num = arr[i].charCodeAt();
if(64<num && num<78){
num +=13;
}else if(78<=num && num<=90){
num -=13;
}else{
}
Arr.push(String.fromCharCode(num));
}
return Arr.join("");
}
// Change the inputs below to test
rot13("GUR DHV9X oEBJA QBT WHZCRQ BIRE GUR YNML SBK.");
//
// A-M 65-77
// N-Z 78-90
// **** 65_77 78-90 ****
另外一种解答:
function rot13(str) { // LBH QVQ VG!
var arr=str.toUpperCase().split("");
var Arr=[];
for(var i=0;i<arr.length;i++){
var num=arr[i].charCodeAt();
if(64<num && num<78){
Arr.push(String.fromCharCode(num +13));
}else if(78<=num && num<=90){
Arr.push(String.fromCharCode(num -13));
}else{
Arr.push(String.fromCharCode(num));
}
}
return Arr.join("");
}
// Change the inputs below to test
rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.");