尝试使JS函数工作,将字符串中的各个字符移动一定量(然后返回新的“移位”字符串)。我正在使用ROT-13(因此A-M向下移动13个字符,N-Z向上移动13个字符)。
问题在于这段代码:
if (arr[i] <= 77) {
finalStr += String.fromCharCode(arr[i] + 13);
此代码应将E移至R.
E(69)+ 13 = R(82)
但是,返回的字符串中应该向下移动13个空格的字符将作为奇怪的符号返回。
“FᬁEEÇ᧕DECAMᨹ”
function rot13(str) {
var newStr = "";
var finalStr = "";
for (i = 0, j = str.length; i < j; i++) {
newStr += str.charCodeAt(i);
newStr += " ";
}
var arr = newStr.split(" ");
arr.pop();
for (i = 0, j = arr.length; i < j; i++) {
if (arr[i] !== 32) {
if (arr[i] <= 77) {
finalStr += String.fromCharCode(arr[i] + 13);
}
else {
finalStr += String.fromCharCode(arr[i] - 13);
}
}
}
return finalStr;
}
rot13("SERR PBQR PNZC");
答案 0 :(得分:0)
问题似乎不是您所识别的问题,而是您处理从字符到字符代码的转换。简化和清理转换逻辑似乎可以解决问题:
function rot13(str) {
var arr = new Array();
for (var i = 0; i < str.length; i++) {
arr[arr.length] = str.charCodeAt(i);
}
var finalStr = "";
for (var i = 0; i < arr.length; i++) {
if (arr[i] !== 32) {
if (arr[i] <= 77) {
finalStr += String.fromCharCode(arr[i] + 13);
} else {
finalStr += String.fromCharCode(arr[i] - 13);
}
} else {
finalStr += String.fromCharCode(32);
}
}
return finalStr;
}
rot13("SERR PBQR PNZC");
返回&#34;免费代码营地&#34;。
答案 1 :(得分:0)
只是为了更多地吹嘘你的想法:
var rot13=function(str){
return str.split('')
.map(function(ch){
var v=ch.charCodeAt(0);
return String.fromCharCode(v > 77 ? v-13 : v+13);
})
.join('');
};
UPDATE - 处理大写和小写字母的版本
var rot13 = function(s){
return s.split('').map(function(c){
var v=c.toLowerCase().charCodeAt(0);
if(v<97 || v>122) return c;
var t = v>=96,
k = (v - 96 + 12) % 26 + 1;
return String.fromCharCode(k + (t ? 96 : 64));
}).join('');
};
rot13('SERR PBQR PNZC') // => FREE CODE CAMP
答案 2 :(得分:0)
刚才有一个想法:为什么不在一条线上做呢?顺便说一句,我查看了免费代码营的挑战,你必须绕过所有非字母数字字符。 这是:
function rot13(str) { // LBH QVQ VG!
return str.split('').map(function(letter){
return letter.match(new RegExp(/\W/i)) ? letter : (letter.charCodeAt(0) <= 77 ? String.fromCharCode(letter.charCodeAt(0) + 13) : String.fromCharCode(letter.charCodeAt(0) - 13));
}).join('');
}
// Change the inputs below to test
rot13("SERR PBQR PNZC"); // FREE CODE CAMP
TADAAAAH : - )
以下是笔:http://codepen.io/liorchamla/pen/mPwdEz/
希望你会喜欢它,并希望你会努力理解这一点!
快乐免费代码营给所有人!