0

どうすればこれを解決できますか。str のすべての母音を大文字にし、アルファベットの各文字をアルファベットの次の文字に変更することになっています (つまり、a -> b、または z -> a)。「str.joinは関数ではありません」を返し続けます。ヘルプはありますか?ちなみにJavaScriptです。

function LetterChanges(str) { 

  str = str.split("");//split() string into array
  for(var i=0;i<str.length;str++){//for loop that checks each letter
    if(str[i]===/[^a-y]/){
      str=str[i].fromCharCode(str[i].charCodeAt(0) + 1);
        }else if(str[i]==='z'){
          str[i] = 'a';
        }
    if(str[i] === 'a'||'e'||'i'||'o'||'u'){
       str[i] = str[i].toUpperCase();
       }

  }

  //modifies letter by adding up in alphabet
  //capitalizes each vowel
  //join() string


  return str.join(); 
}

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

2 に答える 2

1

@Simon Boudrias の回答で説明されているように、コードにはいくつかの論理エラーがあります。

ただし、自己学習のためだけに、問題の代替ソリューションを次に示します。

str.replace(/[a-z]/g, function(c) {
    return 'aeiou'.indexOf(c) > -1
        ? c.toUpperCase()
        : String.fromCharCode(Math.max(c.charCodeAt(0) % 122 + 1, 97));
});
于 2014-01-15T17:09:35.410 に答える
1

わかりました、JavaScript について少し読む必要があります。

これはあなたが思うことをしませんstr[i]===/[^a-y]/。を使用する必要がありますstr[i].match(/[a-y]/i)

これはあなたが思うことをしません: str[i] === 'a'||'e'||'i'||'o'||'u'. 常に true を返します。あなたはこれが欲しいでしょうstr[i].match(/[aeiou]/i)

于 2014-01-15T17:01:36.980 に答える