将rot13编码的字符重新加入一起

问题描述 投票:0回答:2

这是挑战:凯撒密码-字母移动了13位。因此,“ A”↔“ N”,“ Q”↔“ D”,依此类推。

将ROT13编码的字符串作为输入并返回解码的字符串的函数。所有字母均为大写。不要转换任何非字母字符(即空格,标点符号),但要继续传递它们。

*我得到正确的输出,但是目前,每个字母都是一个字符串。有没有一种方法可以将所有单个字母组合成一个句子*

function rot13(str) {
  var original = str.split('')
  var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('')
  let i = 0;
  while(i<original.length){
  let indexVal = alphabet.indexOf(original[i])
  if(indexVal>= 13){
    indexVal -=13
  }else if(indexVal===-1){
    indexVal = 33
  }
  else{
    indexVal += 13
  }
 var final = alphabet[indexVal]
    i++;
    console.log(final)
  }
}
rot13("SERR CVMMN");//should log FREE PIZZA
/* 
currently logs:
F
R
E
E
undefined
P
I
Z
Z
A
undefined
*/
javascript string indexof caesar-cipher rot13
2个回答
0
投票

类似的事情可能起作用:

const testStr = 'SERR CVMMN',

      rot13 = str => {
        const alph = [...'abcdefghijklmnopqrstuvwxyz']
        return [...str]
          .map(char => {
            switch(true){
              case !/[a-z]/i.test(char) : 
                return char     // non alphabetic character translates to itself
              case char.toLowerCase() == char :
                return alph[(alph.indexOf(char)+13)%26]     // lower case character translates to character 13 positions ahead
              default :
                return alph[(alph.indexOf(char.toLowerCase())+13)%26].toUpperCase()     //upper case handled in a similar way
            }
          })
          .join('')
      }
      
console.log(rot13(testStr))

0
投票

想出来] >>

function rot13(str) {
  var original = str.split('')
  var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('')
  let i = 0;
  let arr = "";
  while(i<original.length){
  let indexVal = alphabet.indexOf(original[i])
  if(indexVal>= 13){
    indexVal -=13
  }else if(indexVal===-1){
    indexVal = 33
  }
  else{
    indexVal += 13
  }
  arr+=alphabet[indexVal];
  arr = arr.replace(undefined, original[i])

  i++;
  }
  return arr
}
rot13("GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.");


© www.soinside.com 2019 - 2024. All rights reserved.