题目
把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。
如果你被难住了,记得使用 Read-Search-Ask尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
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.单词中有多个元音音节的,比如:island、every、under,依元音分节,把第一节加上 ay 移动到单词末尾,变成 andislay、eryevay、erunday; - 看题目只要求了1、2、3 三种情况;
- 因此第一步可以先定义一个变量存放所有元音字母;
- 第二步顺序检查str的字符,是用 indexOf() 检查字符是否存在第一个变量中,得出辅音从的长度存入变量 i;碰到第一个元音时,循环结束,得出辅音从长度;
- 最后判断:如果辅音从长度为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 比较结果为 -1时,则说明不存在,即当前比较的字母不为元音;
i++; // 记录辅音丛长度
}
else{
break;
}
}
if(i===0){
return str+"way"; //元音开头
}
else{
return str.substr(i)+str.substr(0,i)+"ay"; //辅音丛开头
}
return a;
}
这一节主要是indexOf(),还有substr()的用法;
一开始对substr不熟,没想到截取怎么做,硬是将循环的字符一个个的 分别存入2个变量,然后用join来拼接,最终结果出现错误,找了半天没找出错误在哪,后来看到题目推荐的 substr,感觉这个应该是可以用上,仔细阅读发现果然可以;
还是要仔细学习题目推荐的所有函数,有大用!