问题描述
我正在完成 CoderByte 练习,但遇到了以下问题:
I'm going through the CoderByte exercises and I came across the following problem:
>使用 JavaScript 语言,让函数 LetterChanges(str) 获取传递的 str 参数并使用以下算法对其进行修改.用字母表中紧随其后的字母替换字符串中的每个字母(即,c 变为 d,z 变为 a).然后将这个新字符串中的每个元音字母 (a, e, i, o, u) 大写,最后返回这个修改后的字符串.
我在 JSBin 中写出它并且它工作正常(即使是 te,但在 CoderByte 中它没有.我想问社区我写的是否正确并且这是 CoderByte 上的问题,或者我的代码是否正确错误,问题出在 JSBin 上.
I wrote out it out in JSBin and it worked fine (even te, but in CoderByte it didn't. I want to ask the community if what I wrote is correct and it's an issue on CoderByte, or if my code is wrong and the issue is with 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 运行器上的一个错误.正如您所说,您的代码运行良好,应该被接受.值得向他们的支持 imo 报告.
Seems like a bug on their back-end JS runner indeed. As you've stated, your code runs fine and should be accepted. Worth reporting it to their support imo.
这是一个替代解决方案 指定一个作为.replace()
的第二个参数的函数:
Here's an alternative solution specifying a function as second parameter to .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();
});
}
这篇关于更改字母算法,适用于 JSBIN 但不适用于 Coderbyte,寻求澄清的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!