我在coderbyte中做了Letter Changing挑战,但我很困惑为什么我的代码不起作用。
使用函数LetterChanges(str)取str参数 使用以下算法传递并修改它。
将字符串中的每个字母替换为后面的字母 字母表(即c变为d,z变为a)。
然后将这个新字符串中的每个元音大写(a,e,i,o,u)和 最后返回这个修改后的字符串。
在最后一个else语句中,我想添加任何不是“newWord”字母的字符。当我通过单词“hello 3”我应该得到“ifmmp 3”,而不是我得到“hhhhhhhihhhhhhhhhhhhhhhhhhheeeefeeeeeeeeeeeeeeeeeeeeeelllllllllllmllllllllllllllllllllllllllmllllllllllllllloooooooooooooopoooooooooooo 333333333333333333333333333undefined .....”如果我采取else语句的时候,我只是得到“ifmmp”没有遇到麻烦3.林理解为什么/如何使用else语句弄乱它以及如何解决这个问题? 我是编码的新手,所以任何帮助都会很棒。
function LetterChanges(str) {
var newWord = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
for(var i = 0; i <= str.length; i++){
if( str[i] === "z"){
newWord += alphabet.charAt(0);
} else if(str[i] === " "){
newWord +=" ";
}
for (var j = 0; j <= alphabet.length; j++){
if(str[i] == alphabet.charAt(j)){
newWord += alphabet.charAt(j+1);
}
// this one -------------------> else {
newWord = newWord + str[i];
}
}
}
return newWord;
}
答案 0 :(得分:0)
试试这个:
function LetterChanges(str) {
var newWord = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
for(var i = 0; i < str.length; i++){
for (var j = 0; j < alphabet.length; j++){
if(str[i] === alphabet.charAt(j)){
if( str[i] === "z"){
newWord += alphabet.charAt(0);
}
else {
newWord += alphabet.charAt(j+1);
}
}
else if (alphabet.indexOf(str[i]) === -1){
newWord += str[i];
break;
}
}
}
return newWord;
}
以下是更有效的解决方案
function LetterChanges(str) {
var newWord = "";
var alphabet = "abcdefghijklmnopqrstuvwxyz";
for(var i = 0; i < str.length; i++){
// if it's a 'z' do not loop through alphabet string and jump straight to the next character.
if( str[i] === "z"){
newWord += alphabet.charAt(0);
continue;
}
for (var j = 0; j < alphabet.length; j++){
// if they match perform replacement
if(str[i] === alphabet.charAt(j)){
newWord += alphabet.charAt(j+1);
break;
}
// if the current char is not contained on the alphabet string (spaces, numbers and so on...) ---> copy it as it is
else if (alphabet.indexOf(str[i]) === -1){
newWord += str[i];
break;
}
// if the current char is contained in the alphabet string but does not match ---> do nothing
}
}
return newWord;
}