无法修复凯撒代码练习中的大写
Cant fix capitalization in Caesar's code exercise
编程新手,非常感谢任何帮助。
我被要求创建一个函数,该函数 return 是一个在字母表中具有给定移位的字符串。
例如:function caesar('a', 1)
应该是 return b.
转换必须保留大写,不应转换标点符号,应环绕字母表,负数应有效。
除大写外,我可以通过以下方式完成上述所有工作:
const caesar = function(string,shift) {
let stringSplitted = string.split('');
let cypher = [];
stringSplitted.map( letter => {
if (letter === ' ' || letter === ',' || letter === '!' || letter === '.') {
return cypher.push(letter);
}
let index = alphabet.indexOf(letter);
if (index + shift > 25) {
cypher.push(alphabet[(index + shift) - alphabet.length])
}
else if(index + (shift)<0) {
return cypher.push(alphabet[(index + shift) + alphabet.length])
}
else
cypher.push(alphabet[index + shift]);
})
return cypher.join('')
}
我知道这很乱。
每当我在字符串中添加大写字母时,结果就会失控
我试过了
if (letter === letter.toLowerCase())
return cypher.push(alphabet[index + shift].toUpperCase())
但它 return 的索引和移位未定义
可能的想法是您使用 ASCII codes,而不是为字母表使用自定义数组,在这种情况下,值 1
对于 'a' 的偏移是 'b','A' 是 'B'。
const caesar = function(string, shift) {
return string.split('').map( letter => {
if (!/[a-z0-9]+$/i.test(letter)) { // Do the shift only for numbers and letters
return letter;
} else {
return String.fromCharCode( letter.charCodeAt(0) + shift ); // return ascii code + shift
}
}).join('');
}
console.log(caesar('abAB', 1));
console.log(caesar('Lorem Ipsum 5', 2));
编程新手,非常感谢任何帮助。
我被要求创建一个函数,该函数 return 是一个在字母表中具有给定移位的字符串。
例如:function caesar('a', 1)
应该是 return b.
转换必须保留大写,不应转换标点符号,应环绕字母表,负数应有效。
除大写外,我可以通过以下方式完成上述所有工作:
const caesar = function(string,shift) {
let stringSplitted = string.split('');
let cypher = [];
stringSplitted.map( letter => {
if (letter === ' ' || letter === ',' || letter === '!' || letter === '.') {
return cypher.push(letter);
}
let index = alphabet.indexOf(letter);
if (index + shift > 25) {
cypher.push(alphabet[(index + shift) - alphabet.length])
}
else if(index + (shift)<0) {
return cypher.push(alphabet[(index + shift) + alphabet.length])
}
else
cypher.push(alphabet[index + shift]);
})
return cypher.join('')
}
我知道这很乱。 每当我在字符串中添加大写字母时,结果就会失控
我试过了
if (letter === letter.toLowerCase())
return cypher.push(alphabet[index + shift].toUpperCase())
但它 return 的索引和移位未定义
可能的想法是您使用 ASCII codes,而不是为字母表使用自定义数组,在这种情况下,值 1
对于 'a' 的偏移是 'b','A' 是 'B'。
const caesar = function(string, shift) {
return string.split('').map( letter => {
if (!/[a-z0-9]+$/i.test(letter)) { // Do the shift only for numbers and letters
return letter;
} else {
return String.fromCharCode( letter.charCodeAt(0) + shift ); // return ascii code + shift
}
}).join('');
}
console.log(caesar('abAB', 1));
console.log(caesar('Lorem Ipsum 5', 2));