我该如何解决这个问题。它应该使得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());
答案 0 :(得分:1)
好的,你需要阅读一下JavaScript。
这不符合您的想法str[i]===/[^a-y]/
。您应该使用str[i].match(/[a-y]/i)
。
这不符合您的想法:str[i] === 'a'||'e'||'i'||'o'||'u'
。它总会回归真实。你会想要这个str[i].match(/[aeiou]/i)
。
答案 1 :(得分:1)
您的代码中存在多个逻辑错误,如@Simon Boudrias answer。
中所述然而,仅仅是为了自学,这是您的问题的替代解决方案:
str.replace(/[a-z]/g, function(c) {
return 'aeiou'.indexOf(c) > -1
? c.toUpperCase()
: String.fromCharCode(Math.max(c.charCodeAt(0) % 122 + 1, 97));
});