我有一个长度为26的数组,每个元素都是字母。我的N也可以是-10到10。 N接受字母并以此方式对其进行更改。 如果我的字母为'a'且N = 2,则我的'a'将变为'c';如果我的字母为'c'且N = -1,则我的'c'将变为'b'。
当我有一个像'z'这样的字母,它是数组的最后一个元素,并且给N一个值时,它返回未定义的值。
如何使其继续在阵列上循环。例如,如果我的字母是“ y”且N = 5,那么它将给我一个“ d”。希望你了解我xD。
答案 0 :(得分:2)
这称为Caesar shift
问题,其中我们根据给定的移位计数(N)来移位字母。
我们必须使用str.charCodeAt
和String.fromCharCode
方法来解决此问题。
function caesarShift(str, amount) {
// Wrap the amount
if (amount < 0)
return caesarShift(str, amount + 26);
// Make an output variable
var output = '';
// Go through each character
for (var i = 0; i < str.length; i++) {
// Get the character we'll be appending
var c = str[i];
// If it's a letter...
if (c.match(/[a-z]/i)) {
// Get its code
var code = str.charCodeAt(i);
// Uppercase letters
if ((code >= 65) && (code <= 90))
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);
// Lowercase letters
else if ((code >= 97) && (code <= 122))
c = String.fromCharCode(((code - 97 + amount) % 26) + 97);
}
// Append
output += c;
}
// All done!
return output;
};
在链接上尝试有效的解决方案-https://jsitor.com/5GG7XuWUk
答案 1 :(得分:0)
在循环中添加一个if语句。
if (i + N > alphabet.Length) alphabet[i] = alphabet[N+i - alphabet.Length]