我经历的CoderByte练习,我碰到下面的问题就来了:
>使用JavaScript语言,具有功能LetterChanges(STR)取被传递str参数,并使用下面的算法进行修改。 在字母表它后面的字母字符串中替换的每一个字母(即c则为d,Z变成了)。 然后,利用这个新的字符串(A,E,I,O,U),最后返回这个修改字符串中的每个元音。
我在JSBin写了出来,它工作得很好(甚至是德,但在CoderByte事实并非如此。我想,如果我写的是正确的问社区,它是在CoderByte一个问题,或者如果我的代码是错误的,问题是与JSBin。
代码如下:
function LetterChanges(str) {
var iLetters = str.split('');
var newStr = [];
for (var i = 0; i < str.length; i++) {
if (/[a-y]/ig.test(iLetters[i])) {
newStr[i] = String.fromCharCode(iLetters[i].charCodeAt(0) + 1);
if (/[aeiou]/ig.test(newStr[i])) {
newStr[i] = newStr[i].toUpperCase();
}
} else if (/[z]/ig.test(iLetters[i])) {
newStr[i] = "A";
} else if (/[^A-Z]/ig.test(iLetters[i])) {
newStr[i] = iLetters[i];
}
}
return newStr.join('');
}
好像在他们的后端JS亚军确实是一个错误。 正如你所说,你的代码运行正常,应该被接受。 值得报告给他们的支持海事组织。
下面是一个替代的解决方案,指定一个函数作为第二个参数 ,以.replace()
function LetterChanges(str) {
return str.replace(/[a-z]/ig, function(c) {
return c.toUpperCase() === 'Z' ? 'A' : String.fromCharCode(c.charCodeAt(0) + 1);
}).replace(/[aeiou]/g, function(c) {
return c.toUpperCase();
});
}
你的代码工作对我蛮好上的jsfiddle时对下列情形相比,
在CoderByte,你的代码失败,但下面的工作。 似乎是在其网站上的一个问题。
function letterChanges(str) {
var newString = "",
code,
length,
index;
for (index = 0, length = str.length; index < length; index += 1) {
code = str.charCodeAt(index);
switch (code) {
case 90:
code = 65;
break;
case 122:
code = 97
break;
default:
if ((code >= 65 && code < 90) || (code >= 97 && code < 122)) {
code += 1;
}
}
newString += String.fromCharCode(code);
}
return newString.replace(/[aeiou]/g, function (character) {
return character.toUpperCase();
});
}
console.log(LetterChanges("Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string."));
console.log(letterChanges("Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string."));
产量
UIfO dbqjUbmjAf fwfsz wpxfm jO UIjt Ofx tUsjOh (b, f, j, p, v) bOE gjObmmz sfUvsO UIjt npEjgjfE tUsjOh. fiddle.jshell.net/:70
UIfO dbqjUbmjAf fwfsz wpxfm jO UIjt Ofx tUsjOh (b, f, j, p, v) bOE gjObmmz sfUvsO UIjt npEjgjfE tUsjOh.
从@答案FABRICIO磨砂和位解释只是另一种解决方案是,使用正则表达式获得第一字母从a到z使用/[az]/
和通过加入一种使用每个字符串的ASCII代替它们String.fromCharCode(Estr.charCodeAt(0)+1)
剩下的就是找到元音的再次使用正则表达式的事情[aeiou]
,返回它的大写字符串。
function LetterChanges(str) {
return str.replace(/[a-z]/ig, function(Estr) {
return String.fromCharCode(Estr.charCodeAt(0)+1);
}).replace(/[aeiou]/ig, function(readyStr) {
return readyStr.toUpperCase();
})
}
文章来源: Changing Letters Algorithm, works in JSBIN but not in Coderbyte, seeking clarification