如何解决元音和辅音之间的字符串交替
- 我应该创建一个函数,该函数接受字符串作为参数并验证元音和辅音在整个过程中是否处于交替顺序。它应该相应地返回true或false。
- 我在下面尝试过此方法,但它只是以true表示,而不会检查true和false的其他可能性。我想念/做错了什么?我不仅想要答案,还希望解释一下此功能的作用,以设置该功能的正确性。
function isAlt(str) {
let vowels = ["a","e","o","i","u"];
for(i = 0; i < str.length; i++) {
if(vowels.indexOf(str[i]) >= 0) {
if(vowels.indexOf(str[i+1]) === -1);
return true;
} else if(vowels.indexOf(str[i]) ===-1) {
if(vowels.indexOf(str[i+1]) >= 0)
return true;
} else if(vowels.indexOf(str[i]) >= 0) {
if(vowels.indexOf(str[i+1]) >=0);
return false;
} else if(vowels.indexOf(str[i]) === -1) {
if(vowels.indexOf(str[i+1]) === -1);
return false;
}
}
}
isAlt('apple'); // apple is false,amazon is true.
解决方法
即使发现后面有一对不可替代的对,您也会在找到一对对时返回true
。当您找到一个非替代对时可以立即返回,但是在返回true
之前,您必须遍历整个字符串。
还应该将for
循环限制为i < str.length - 1
,以使str[i+1]
在字符串内。
function isAlt(str) {
function isVowel(c) {
let vowels = ["a","e","o","i","u"];
return vowels.includes(c);
}
for (i = 0; i < str.length - 1; i++) {
if (isVowel(str[i]) == isVowel(str[i + 1])) {
return false;
}
}
return true;
}
console.log(isAlt('apple'));
console.log(isAlt('amazon'));
如果将检查字母是否为元音的代码移至单独的函数,则该代码更易于阅读,并且重复性较低。然后,您不需要两个情况,因为str[i]
是元音而str[i]
不是元音-只需测试相邻字符的结果是否相同即可。
您在if
内的第一个语句格式不正确。
if(vowels.indexOf(str[i+1]) === -1);
在此情况之后,您要结束if
语句。
这意味着,如果外部if
语句得到满足,程序将返回'true'并结束。
对内部if
语句也使用正确的语法。
if (condition){
// do something
}
我猜你是说:
if(vowels.indexOf(str[i]) >= 0) {
if(vowels.indexOf(str[i+1]) === -1){
return true;
}
} else if...
如果这就是您的意思,则该函数不会超出第一个if和else语句。并且当它确实满足时,它返回true或for循环继续。当它继续下去时,会遇到一个条件为true的情况,并且返回'true'。
首先,让我们以“苹果”为例:
- “ a”满足以下第一个条件:
if(vowels.indexOf(str[i]) >= 0) {
-
str[i+1]
如果正在寻找辅音(例如“ p”)的条件是辅音,则满足内部条件。 - 该函数返回
true
,程序结束。 - 我们甚至没有运行其他
else if
条语句。
让我们再举一个“西红柿”的例子:
- 't'不满足第一个
if
语句,并移至第一个else
- 't'满足第一个
else
语句,该语句正在寻找辅音:else if(vowels.indexOf(str[i]) ===-1) {
- 和
str[i+1]
-'o'满足内部if
循环以寻找元音:if(vowels.indexOf(str[i+1]) >= 0){
- 函数返回
true
,程序结束。
现在,让我们举个例子,在开始的“学校”中没有元音:
- 的'不满足寻找元音的第一个
if
语句,并转到第一个else
- 的'满足第一个
else statement looking for a consonant:
否则if(vowels.indexOf(str [i])===-1){and moves on to the inside
if`语句寻找元音。 - 但是下一个字母'c'不满足
if
的{{1}}循环内的要求:if(vowels.indexOf(str[i+1]) >= 0){
- 由于您满足第一个
else
语句,因此未读取下一个else
语句。 -
for
循环继续进行,i递增1。 -
str[i]
现在为'c',并且不满足寻找元音的第一个if
。 - 但是它再次满足了以下
else
语句以寻找辅音,并且程序进入了内部if statement
,该语句正在寻找下一个字母为元音。 - 下一个字母为“ h”,不满足内部循环的要求,因此没有任何反应,并且“ for”循环继续。
i
再次增加1。 -
str[i]
现在为'h',并且像以前一样,它将传递第一个if
语句并与第一个else
语句寻找辅音。 - 但是在这里,它将通过内部循环,该循环正在寻找元音,因为下一个字母是'o'。
- 函数将按规定返回true,程序将结束。
因此,您看到,无论您在函数中输入什么单词,都将始终返回“ true”
要解决此问题:建议您重新考虑程序的逻辑。
,function isAlt(str) {
let vowels = ["a","u"];
for(i = 0; i < str.length-1; i++) {
if(vowels.indexOf(str[i]) >= 0 && vowels.indexOf(str[i+1])>=0)
return false;
else if(vowels.indexOf(str[i]) === -1 && vowels.indexOf(str[i+1])===-1)
return false;
}
return true;
}
您可以检查必须返回false的条件,例如两个连续的元音或两个连续的辅音。您还可以在数组中添加大写元音。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。