程序使元音大写字符串并将字母更改为字母表中的下一个字母(即 a->b)不起作用



我该如何解决这个问题。它应该使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());                            

好的,你需要阅读一些关于JavaScript的内容。

这不是你认为str[i]===/[^a-y]/.您应该使用 str[i].match(/[a-y]/i) .

这不会像你想象的那样:str[i] === 'a'||'e'||'i'||'o'||'u'.它将始终返回 true。你会想要这个str[i].match(/[aeiou]/i).

您的代码中存在几个逻辑错误,如 Boudrias 回答@Simon所述。

但是,仅出于自学,这里是您问题的替代解决方案:

str.replace(/[a-z]/g, function(c) {
    return 'aeiou'.indexOf(c) > -1
        ? c.toUpperCase()
        : String.fromCharCode(Math.max(c.charCodeAt(0) % 122 + 1, 97));
});

最新更新