无法弄清楚为什么我的 ROT13 转换器适用于小写但不适用于大写



我不知道为什么我的 ROT13 转换器不适用于大写字母。 它适用于小写字母。 我一直在尝试找到这个问题一段时间了,但没有运气。 感谢您的帮助。

这是代码


var rot13 = str => {
let alphabet = 'abcdefghijklmnopqrstuvwxyz';
let alphabetUp = alphabet.toUpperCase();
let ci = [];
for (let i = 0; i < str.length; i++) {
let index = alphabet.indexOf(str[i]);

// for symbols
if (!str[i].match(/[a-z]/ig)) {
ci.push(str[i])
// for letters A to M
} else if (str[i].match(/[A-M]/ig)) {
//lowercase
if (str[i].match(/[a-m]/g)) {
ci.push(alphabet[index + 13])
//uppercase (doensn't work)       
} else if (str[i].match(/[A-M]/g)) {
ci.push(alphabetUp[index + 13])
}
// for letters N to Z
} else if (str[i].match(/[n-z]/ig)) {
//lowercase
if (str[i].match(/[n-z]/g)) {
ci.push(alphabet[index - 13])
//uppercase (doensn't work)       
} else if (str[i].match(/[N-Z]/g)) {
ci.push(alphabetUp[index - 13])
}
}
}
return ci.join("");
}

您可以通过将13 添加到索引并使用模 26 获取新索引,然后检查原始字母是否为大写来轻松做到这一点。 试试这个

const rot13 = str => {
let alphabet = 'abcdefghijklmnopqrstuvwxyz';

let newstr = [...str].map(letter => {
let index = alphabet.indexOf(letter.toLowerCase());
if(index === -1) {
return letter;
}
index = (index + 13) % 26;
return letter === letter.toUpperCase() ? alphabet[index].toUpperCase() : alphabet[index];
})

return newstr.join("");
}
console.log(rot13('hello'))

相关内容

  • 没有找到相关文章

最新更新