如何计算字符串中有多少辅音?

时间:2017-10-24 10:44:38

标签: javascript

我在解决方案附近吗?我总是得到双倍数量的辅音。

我确信这是正确的方法。



function consonants(str) {
  var countConsonants = 0;

  for (var i = 0; i <= str.length; i++) {

    if (str[i] !== "a" || str[i] !== "e" || str[i] !== "i" ||
      str[i] !== "o" || str[i] !== "u" || str[i] !== " ") {
      countConsonants += 1;
    }
  }
  return (countConsonants);
}
consonants("asdfghaaa");
&#13;
&#13;
&#13;

我期待5的回答,即sdfgh是辅音。

8 个答案:

答案 0 :(得分:5)

你的逻辑是有缺陷的,你的条件中的运算符应该是AND &&而不是OR ||,因为你想比较所有的chars而不仅仅是其中一个:

&#13;
&#13;
function consonants(str) {
  var countConsonants = 0;

  for (var i = 0; i < str.length; i++) {

    if (str[i] !== "a" && str[i] !== "e" && str[i] !== "i" &&
      str[i] !== "o" && str[i] !== "u" && str[i] !== " ") {
      countConsonants++;
    }
  }
  return (countConsonants);
}
console.log(consonants("asdfghaaa"));
&#13;
&#13;
&#13;

注意:循环应该停在length-1,因为数组是基于0的,所以替换:

for (var i = 0; i <= str.length; i++) {
__________________^^

通过:

for (var i = 0; i < str.length; i++) {
__________________^

希望这有帮助。

答案 1 :(得分:2)

你的回答几乎是正确的。唯一的问题是||而不是&&。你检查它不是一个AND它不是e而它不是我等等。你的函数对于每一个字母都是真的,因为a是(不是||不是e),对吗?

答案 2 :(得分:2)

你可以做到

&#13;
&#13;
let str = 'asdfghaaa';

let result = str.split('').filter(e => e.match(/[^aeiou]/) != null).length;

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:2)

计数中的主要问题在于你的条件。

当其中一个条件失败时,你会增加辅音的数量(这就是||所做的,称为OR运算符)。因此,无论何时角色!== "a"!== "e",您都会增加计数,这是错误的。 (想象一下a是!== 'e',所以你把它算作一个辅音。)

||二元运算符更改为&&(AND);这样,只要当前字符str[i]不在你要验证的值(a,e,i,o,u,'')中,你只会增加辅音计数。

正如其他人指出的那样,你也可能遇到错误,因为i的最大值应该是Length-1。

还需要考虑其他问题:

  • 当字符是大写字母时会发生什么?
  • 当字符是标点符号或数字时会发生什么?

对于初学者来说,这可能不相关,但是值得在你的皮肤下获取这些技术:创建一个包含你要验证的所有值的数组更具可读性[“a”,“e”然后,对于源字符串中的每个字符,只需验证array.indexOf(str [i])&gt; = 0(这意味着该字符包含在数组中)。

答案 4 :(得分:1)

您需要和您的条件,因为如果您使用||,条件总是评估为真。你的循环应该从0到索引&lt; str.length。

&#13;
&#13;
function consonants(str) {
	var countConsonants = 0;

	for (var i = 0; i < str.length; i++) {
		if (str.charAt(i) !== "a" && str.charAt(i) !== "e" && str.charAt(i) !== "i" 
			&& str.charAt(i) !== "o" && str.charAt(i) !== "u" && str.charAt(i) !== " ") {
			countConsonants++;
		}
  }
    return countConsonants;
}
console.log(consonants("asdfghaaa"));
&#13;
&#13;
&#13;

答案 5 :(得分:1)

function consonants (str) {
    return str.match(/[aeoiu]/gi)||[].length;
}

长串可能不好。

答案 6 :(得分:0)

我也遇到过这个挑战,我是这样做的:

const paragraph = "A quick brow fox is trying to bite me."
paragraph.match(/(?![aeiou])[a-z]/gi, "").length

来源:https://forum.freecodecamp.org/t/regex-for-consonants/282833/4

答案 7 :(得分:0)

这是一个工作示例

  let str="Hello world.";
  let vowel=str.match(/[aeiou]/gi).length;
  let consonant = str.match(/[^aeiou .]/gi).length;
  console.log("Vowel "+vowel+"\n");
  console.log("Vowel "+consonant+"\n");