2015-05-07 89 views
-2

挑戰提出的問題:這個編碼器字節代碼有什麼問題(簡單的挑戰2)?

使用JavaScript語言,請使用函數LetterChanges(str)傳遞str參數並使用以下算法對其進行修改。將字符串中的每個字母替換爲字母后面的字母(即c變成d,z變成a)。然後在這個新字符串(a,e,i,o,u)中大寫每個元音,最後返回這個修改過的字符串。

我的解決辦法:

function LetterChanges(str) { 

var alphabet = [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 vowels = [a,e,i,o,u]; 
var stringToArray = str.split(""); 

for (i=0; i<=stringToArray.length; i++){  //goes through new array one-by-one 
    var originalLetter = stringToArray[i]  // names each letter 
    var alphabetPosition = alphabet.indexOf(); // finds letter position in alphabet array 
    var newAlphabetPosition = alphabetPosition + 1; // adds one to that position 
    var newLetter = alphabet[newAlphabetPosition]; // changes the old letter to the new 
    newLetter = stringToArray[i];    // sends new letter to its position on new array 
    if (newLetter.isInArray(vowels){   // finds if new letter is a vowel 
     newLetter = newLetter.toUpperCase(); // if yes, turn into upper case 
     }  
    str = stringToArray.toStr()     //turns array back to string, and names it str 
} 
return str;   
} 

我試着在我的思路很清晰,增加一個步驟之一。請不要使用快速方法,因爲我真的想正確理解挑戰背後的原因,而不是記住方法。

+0

什麼是你的實際問題?如果此代碼正常工作,並且您還有其他關於重構,性能和可維護性的問題,您還可以考慮[代碼評論](http://codereview.stackexchange.com/)。不要在這兩個網站上發帖。 – ryanyuyu

+0

@Kvera此代碼[似乎無法正常工作](http://repl.it/languages/JavaScript)... – Phrancis

回答

0

的代碼不能正常工作......因爲幾個錯誤:

  1. 什麼是我?你忘了宣佈嗎?
  2. 將字符串轉換爲數組後,第一個字符從0開始,最後一個字符的長度爲-1。你的for循環條件有我< = stringToArray.length它將包括超出數組長度的一個字符。
  3. var alphabetPosition = alphabet.indexOf();什麼索引?你忘了indexOf(originalLetter)嗎?
  4. 你忘了「z」。你需要一些邏輯來「環繞」回「a」。
  5. isInArray isNotAFunctionYouShowedUs。實際上Javascript只有「indexOf」,它在不匹配時返回-1,除非我錯了。
function LetterChanges(str) { 
    for (var i = 0; i < str.length; i++) { 
    var newCharCode = str.charCodeAt(i) + 1; //Get Decimal Value for character at index "i", and increment by 1. 
    if (newCharCode == 123) { //Pesky 'z' becomes '{'. Lets change it to 'a' instead. 
     newCharCode = 97; // 'a' = 97. 
    } 
    if ([97,101,105,111,117].indexOf(newCharCode)!=-1) { //Is it a vowel? (97 = a, 101 = e, 105 = i, 111= o, 117 = u) 
     newCharCode-=32; //Make it capital. (65 = A, 69 = E, 73 = I, 79 = O, 85 = U) 
    } 
    console.log(newCharCode); 
    str = str.substr(0,i) + String.fromCharCode(newCharCode) + str.substr(i+1); //Convert it back to a character, and stick it back into the string. 
    console.log(str); 
    } 
    return str; 
} 

標誌着我一些東西還挺快...只是爲了好玩。 (未經測試)它只使用2個變量,並做了一些老式的ascii欺騙。

+0

令人驚歎,謝謝! – Kvera

0

我CoderByte解決方案(https://github.com/ambatiramireddy/My-CoderByte-Solutions

function LetterChanges(str) { 
     var vowels = 'aeiou', result = '', changedChar; 
     for (i = 0; i < str.length; i++) { 
      var c = str.charCodeAt(i); 
      if (c >= 97 && c < 122) 
       changedChar = String.fromCharCode(c + 1); 
      else if (c == 122) 
       changedChar = String.fromCharCode(97); 
      else 
       changedChar = str[i]; 

      if (vowels.indexOf(changedChar) != -1) 
       changedChar = changedChar.toUpperCase(); 

      result += changedChar; 
     } 
     return result; 
    } 
相關問題