1

CoderByte の演習を行っているときに、次の問題に遭遇しました。

> JavaScript 言語を使用して、渡された str パラメーターを関数 LetterChanges(str) に取り、次のアルゴリズムを使用してそれを変更します。文字列内のすべての文字を、アルファベットでそれに続く文字に置き換えます (つまり、c は d になり、z は a になります)。次に、この新しい文字列 (a、e、i、o、u) のすべての母音を大文字にし、最後にこの変更された文字列を返します。

私はそれを JSBin に書き出しましたが、うまくいきました (te でも、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('');
}
4

3 に答える 3

0

@Fabrício Mattéの答えからのもう1つの解決策と少しの説明は、正規表現を使用してaからzまでの最初のアルファベットを取得し、使用し/[a-z]/て各文字列のASCIIに1つ追加することでそれらを置き換え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();
    })   
}
于 2016-02-08T08:54:46.610 に答える
0

次の代替案と比較すると、あなたのコードは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. 
于 2013-08-03T19:51:48.770 に答える