#268 Caesars Cipher

2017-02-13  本文已影响0人  Kaier5
字母 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以外 不变

解题思路:

  1. 将str内小写字母更换为大写(此题条件均无小写)
  2. 由上列表可得出,Unicode在何区间需要做出调整,是+13,还是-13,还是不变?
  3. String.charCodeAt() 将字符变换为Unicode;
  4. String.fromCharCode(num) 将unicode还原为字符
  5. 建立for循环
  6. 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.");
上一篇 下一篇

猜你喜欢

热点阅读