題目
把指定的字符串翻譯成 pig latin。
Pig Latin 把一個(gè)英文單詞的第一個(gè)輔音或輔音叢(consonant cluster)移到詞尾,然后加上后綴 "ay"。
如果單詞以元音開(kāi)始,你只需要在詞尾添加 "way" 就可以了。
如果你被難住了,記得使用 Read-Search-Ask嘗試與他人結(jié)伴編程、編寫(xiě)你自己的代碼。
這是一些對(duì)你有幫助的資源:
Array.indexOf()
Array.push()
Array.join()
String.substr()
String.split()
思路
- 看起來(lái)是一個(gè)文字游戲,外國(guó)人的文字游戲也挺好玩的;
- 不過(guò)恕我文盲,輔音和輔音叢是神馬玩意,還有元音.....看來(lái)要?jiǎng)佑?Read大法了;
- Read 大法好啊,大概有4種情況:
*1. 第一個(gè)字母是輔音,比如:lay、car、bus...,就把第一個(gè)字母加上 ay 移動(dòng)到單詞末尾,變成 aylay、arcay、usbay;
*2. 前幾個(gè)字母都是輔音(輔音叢),比如:Chrome、fly、play,就把前幾個(gè)輔音都 加上 ay 移動(dòng)到單子末尾,變成 omeChray、yflay、ayplay;
*3.第一個(gè)字母是元音,比如:away、alarm、omelet,就把單詞直接加上 way,變成 awayway、alarmway、omeletway;
*4.單詞中有多個(gè)元音音節(jié)的,比如:island、every、under,依元音分節(jié),把第一節(jié)加上 ay 移動(dòng)到單詞末尾,變成 andislay、eryevay、erunday; - 看題目只要求了1、2、3 三種情況;
- 因此第一步可以先定義一個(gè)變量存放所有元音字母;
- 第二步順序檢查str的字符,是用 indexOf() 檢查字符是否存在第一個(gè)變量中,得出輔音從的長(zhǎng)度存入變量 i;碰到第一個(gè)元音時(shí),循環(huán)結(jié)束,得出輔音從長(zhǎng)度;
- 最后判斷:如果輔音從長(zhǎng)度為i=0,則直接加上 way;否則str 截取 i之后的字符加上 i之前的字符再加上 ay;
解答
function translate(str) {
var y=['a','e','i','o','u']; //定義元音
var i=0; //保存輔音叢的長(zhǎng)度
while(i<str.length){
if(y.indexOf(str[i])=== -1){ // indexOf 比較結(jié)果為 -1時(shí),則說(shuō)明不存在,即當(dāng)前比較的字母不為元音;
i++; // 記錄輔音叢長(zhǎng)度
}
else{
break;
}
}
if(i===0){
return str+"way"; //元音開(kāi)頭
}
else{
return str.substr(i)+str.substr(0,i)+"ay"; //輔音叢開(kāi)頭
}
return a;
}
這一節(jié)主要是indexOf(),還有substr()的用法;
一開(kāi)始對(duì)substr不熟,沒(méi)想到截取怎么做,硬是將循環(huán)的字符一個(gè)個(gè)的 分別存入2個(gè)變量,然后用join來(lái)拼接,最終結(jié)果出現(xiàn)錯(cuò)誤,找了半天沒(méi)找出錯(cuò)誤在哪,后來(lái)看到題目推薦的 substr,感覺(jué)這個(gè)應(yīng)該是可以用上,仔細(xì)閱讀發(fā)現(xiàn)果然可以;
還是要仔細(xì)學(xué)習(xí)題目推薦的所有函數(shù),有大用!