-->

更改字母算法,工作在JSBIN但不是在Coderbyte,寻求澄清(Changing Letters

2019-09-25 19:02发布

我经历的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('');
}

Answer 1:

好像在他们的后端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();
  });
}


Answer 2:

你的代码工作对我蛮好上的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. 


Answer 3:

从@答案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