我写了一个ROT13密码脚本,只旋转大写字母。这个功能可以改善吗?
function rot13(str) {
var codeA = "A".charCodeAt(0);
var codeN = "N".charCodeAt(0);
var codeZ = "Z".charCodeAt(0);
var newArr = [];
for(var i =0; i<str.length; i++){
var code = str.charCodeAt(i);
if(code>=codeA && code<=codeZ){
if(code>=codeN)
newArr.push(String.fromCharCode(code-13));
else
newArr.push(String.fromCharCode(code+13));
}else{
newArr.push(str[i]);}
}
return newArr.join("");
}发布于 2018-01-19 07:06:58
function rot13(str) {
return str.replace(/([A-M])|([a-m]])|([N-Z])|([n-z])/g, function(match, p1, p2, p3, p4) {
switch(match) {
case p1:
case p2:
return String.fromCharCode(match.charCodeAt(0) + 13);
case p3:
case p4:
return String.fromCharCode(match.charCodeAt(0) - 13);
}
});
}此代码应同时适用于大写和小写。p1包含匹配[A-M]的所有字符,p2包含匹配[a-m]的所有字符,p3包含匹配[N-Z]的所有字符,p4包含匹配[n-z]的所有字符。对于范围为A/a到M/m的字符,将字符代码向上移动13 (+)。对于范围为N/n到Z/z的字符,将char-代码向下移动13 (-)。
有关替换()函数的更多信息可以找到这里。
发布于 2020-11-26 04:49:46
shift参数,但是您可以为rot13或任何其他数字选择13。// Caesar Cipher
const caesarCipher = (string: string, shift: number) => {
// Alphabet
const alphabet: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Encoded Text
let encodedText: string = '';
// Adjust Shift (Over 26 Characters)
if (shift > 26) {
// Assign Remainder As Shift
shift = shift % 26;
}
// Iterate Over Data
let i: number = 0;
while (i < string.length) {
// Valid Alphabet Characters
if (alphabet.indexOf(string[i]) !== -1) {
// Find Alphabet Index
const alphabetIndex: number = alphabet.indexOf((string[i]).toUpperCase());
// Alphabet Index Is In Alphabet Range
if (alphabet[alphabetIndex + shift]) {
// Append To String
encodedText += alphabet[alphabetIndex + shift];
}
// Alphabet Index Out Of Range (Adjust Alphabet By 26 Characters)
else {
// Append To String
encodedText += alphabet[alphabetIndex + shift - 26];
}
}
// Special Characters
else {
// Append To String
encodedText += string[i];
}
// Increase I
i++;
}
return encodedText;
};console.log(caesarCipher('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 2));
Output:
CDEFGHIJKLMNOPQRSTUVWXYZABconsole.log(caesarCipher('GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.', 26 + 13));
Output:
THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX.https://codereview.stackexchange.com/questions/132125
复制相似问题