元音和辅音之间的字符串交替

问题描述

  1. 我应该创建一个函数,该函数接受字符串作为参数并验证元音和辅音在整个过程中是否处于交替顺序。它应该相应地返回true或false。
  2. 我在下面尝试过此方法,但它只是以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的条件,例如两个连续的元音或两个连续的辅音。您还可以在数组中添加大写元音。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...