題目
把指定的字符串翻譯成 pig latin岭洲。
Pig Latin 把一個英文單詞的第一個輔音或輔音叢(consonant cluster)移到詞尾祭陷,然后加上后綴 "ay"禀崖。
如果單詞以元音開始箍铭,你只需要在詞尾添加 "way" 就可以了。
如果你被難住了爹脾,記得使用 Read-Search-Ask嘗試與他人結(jié)伴編程帖旨、編寫你自己的代碼。
這是一些對你有幫助的資源:
Array.indexOf()
Array.push()
Array.join()
String.substr()
String.split()
思路
- 看起來是一個文字游戲灵妨,外國人的文字游戲也挺好玩的解阅;
- 不過恕我文盲,輔音和輔音叢是神馬玩意泌霍,還有元音.....看來要動用 Read大法了货抄;
- Read 大法好啊,大概有4種情況:
*1. 第一個字母是輔音朱转,比如:lay蟹地、car、bus...藤为,就把第一個字母加上 ay 移動到單詞末尾怪与,變成 aylay、arcay缅疟、usbay分别;
*2. 前幾個字母都是輔音(輔音叢)遍愿,比如:Chrome、fly耘斩、play沼填,就把前幾個輔音都 加上 ay 移動到單子末尾,變成 omeChray括授、yflay坞笙、ayplay;
*3.第一個字母是元音荚虚,比如:away薛夜、alarm、omelet曲管,就把單詞直接加上 way却邓,變成 awayway、alarmway院水、omeletway腊徙;
*4.單詞中有多個元音音節(jié)的,比如:island檬某、every撬腾、under,依元音分節(jié)恢恼,把第一節(jié)加上 ay 移動到單詞末尾民傻,變成 andislay、eryevay场斑、erunday; - 看題目只要求了1漓踢、2、3 三種情況漏隐;
- 因此第一步可以先定義一個變量存放所有元音字母喧半;
- 第二步順序檢查str的字符,是用 indexOf() 檢查字符是否存在第一個變量中青责,得出輔音從的長度存入變量 i挺据;碰到第一個元音時,循環(huán)結(jié)束脖隶,得出輔音從長度扁耐;
- 最后判斷:如果輔音從長度為i=0,則直接加上 way产阱;否則str 截取 i之后的字符加上 i之前的字符再加上 ay婉称;
解答
function translate(str) {
var y=['a','e','i','o','u']; //定義元音
var i=0; //保存輔音叢的長度
while(i<str.length){
if(y.indexOf(str[i])=== -1){ // indexOf 比較結(jié)果為 -1時,則說明不存在,即當(dāng)前比較的字母不為元音王暗;
i++; // 記錄輔音叢長度
}
else{
break;
}
}
if(i===0){
return str+"way"; //元音開頭
}
else{
return str.substr(i)+str.substr(0,i)+"ay"; //輔音叢開頭
}
return a;
}
這一節(jié)主要是indexOf()榨乎,還有substr()的用法;
一開始對substr不熟瘫筐,沒想到截取怎么做,硬是將循環(huán)的字符一個個的 分別存入2個變量铐姚,然后用join來拼接策肝,最終結(jié)果出現(xiàn)錯誤,找了半天沒找出錯誤在哪隐绵,后來看到題目推薦的 substr之众,感覺這個應(yīng)該是可以用上,仔細(xì)閱讀發(fā)現(xiàn)果然可以依许;
還是要仔細(xì)學(xué)習(xí)題目推薦的所有函數(shù)棺禾,有大用!