2015-07-12 65 views
1

目的 給定一個字符串,翻譯串入PigLatin(如果字符串以元音開頭,追加「的方式」結束串 - 別人看的第一個元音並採取所有前面的字母,並在str的末尾放置,添加「ay」)。PigLatin問題與SUBSTR()和slice()

CODE

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 

    //if first letter = vowel, add 'way' to end of sentence 
    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[0]) > -1) { 
      return str + 'way'; 
     } else { 
      return str.substr(i+1) + str.slice(0,i+1) + 'ay'; 
     } 
    } 
} 




translate("dresser"); 

質詢

  1. 上述代碼工作的情況下,這樣的 「算法」 和 「桌子」,但與 「手套」 失敗 - 導致我相信問題在於.substr()或.slice()。另外的調查認爲這是一個邏輯錯誤。任何幫助表示讚賞!

回答

1

問題是,在第一次迭代期間,您的代碼將始終從循環中返回。 i將永遠不會大於0.

你應該做的(對於初學者)是從循環內移除檢查。像這樣:

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 
    //if first letter = vowel, add 'way' to end of sentence 
    if (vowel.indexOf(str[0]) > -1) { 
     return str + 'way'; 
    } 

    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[i]) > -1) { 
      return str.substr(i) + str.slice(0,i) + 'ay'; 
     } 
    } 
} 

這段代碼應該有效。

+0

hmmmm ...你能精心設計嗎? 當vowel.indexOf(str [i])> -1時,我需要使用'break'語句嗎? – jonplaca

+0

@kidlogic不,沒有中斷聲明。你無條件地從循環中過早地返回。我用適用的代碼更新了我的答案。我拿出'i + 1'並用'i'替換它們。 – yts

+0

你爲此 - 我感到愚蠢,因爲我最近有非常相似的代碼,但後來認爲我是多餘的我的vowel.indexOf(str [i])> -1 謝謝! – jonplaca

0

如果字符是元音,您將返回值而不測試。

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 

    //if first letter = vowel, add 'way' to end of sentence 
    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[0]) > -1) { 
      return str + 'way'; 
     } else if(vowel.indexOf(str[i]) !== -1) { 
      return str.substr(i) + str.slice(0,i) + 'ay'; 
     } 
    } 
} 

請注意我如何添加if來測試字符是否爲元音。

jsfiddle