0

誰かの Coderbyte コードを分析/リバース エンジニアリングしようとしています。この課題の目的は、文字列パラメーターを取得し、文字列のすべての文字をアルファベットでそれに続く文字に置き換えることです (a は b になり、z は a になります)。など)。次に、新しい文字列のすべての母音を大文字にします (a、e、i、o、u)。誰かのコードを見つけた後、私は彼/彼女がそれを単純化した方法に驚きましたが、2 つの具体的な質問がありました:

1) コードのどの部分 (以下を参照) が大文字になっていますか??? 見てないから見逃してる???(おそらく完全に明白なものになるだろうと見てください)

2) else ステートメントはいつ機能しますか? if-else は if (n>-1) なので、いつ n <= -1 になるのでしょうか? コードでは、n は常に、指定された文字列パラメーターの特定の文字のインデックスになります。これは、oldAlph のインデックスです。そのインデックスは 0 ~ 25 で構成されます。したがって、いつ -1、または -2 になるかわかりません...

コードは次のとおりです。

function LetterChanges(str) { 

  // code goes here
  var n = 0;
  var nstr = "";
  var oldAlph = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
  var newAlph = ["b","c","d","E","f","g","h","I","j","k","l","m","n","O","p","q","r","s","t","U","v","w","x","y","z","A"];
  for (i=0;i<str.length;i++) {
    n = oldAlph.indexOf(str.substr(i,1));
    if (n>-1) {
      nstr = nstr + newAlph[n];
    } else {
      nstr = nstr + str.substr(i,1);
    }
  }
   return nstr; 

}

// keep this function call here 
// to see how to enter arguments in JavaScript scroll down
LetterChanges(readline());
4

4 に答える 4

1

質問に対する回答は既にあるので、正規表現と文字コードを使用して問題を解決する方法を次に示します。

function transform(str) {
  return str.replace(/[a-z]/gi, function(l) {
    var next = String.fromCharCode(l.charCodeAt(0) + 1);
    if (/[aeiou]/.test(next)) next = next.toUpperCase();
    return l == 'Z' ? 'A' : l == 'z' ? 'a' : next;
  });
}

transform('hello world'); //=> "Ifmmp xpsmE"
于 2013-12-01T04:12:23.160 に答える
0

newAlph 配列には、大文字の母音が既に含まれています。

最初の if ステートメントは、現在の文字が文字の場合、newAlph からの文字を nstr 変数に追加します。

于 2013-12-01T04:09:48.387 に答える