2017-02-17 41 views
0

元音数量我写元音返回对于给定的字符串数的功能,这里是代码:计数字符串中的

int isVowel(string sequence) 
{ 
    int numberOfVowels = 0;   //Initialize number of vowels to zero 
    string vowels = "aeiouAEIOU"; //Possible vowels, including capitals 
    for (int i = 0; i <= sequence.length(); i++) 
    { 
     for (int j = 0; j <= vowels.length(); j++) 
     { 
      if (sequence[i] == vowels[j]) 
      { 
       numberOfVowels += 1; 
      } 
     } 
    } 
    return numberOfVowels; 
} 

这会返回一个是关闭的答案。例如,“一个”返回2,“AA”的输入输入返回3等

+3

我建议你学习一些调试技巧。您可以使用源代码级别的调试器,如gdb或IDE中内置的调试器,也可以添加cout语句来打印变量的值。 –

+0

'isVowel()'强烈建议与''('cctype')中的函数具有相似性。这些测试一个字符。也许你的函数应该被重命名为'numVowels()'或者一些这样的名字,强调它计算字符串中的元音。 –

+0

也许你应该在找到一场比赛时打破内在循环;你不需要测试其他角色。也许你应该在'a'之前对'e'进行优化,因为在运行文本中有更多的e比a更好,通常呢? –

回答

4
i <= sequence.length() 

<=是在任何for循环几乎从不正确的,因为C++使用基于0的索引。相反,你应该这样做

i < sequence.length() 
+0

我想这是这样的,谢谢你的输入! – Froobyflake

+2

而且,有趣的是,问题是字符串末尾的空字节正在被比较,并且它们是相等的,所以它被计数。这不是一个明显的错误后果。 –

+0

是的,这确实很微妙,我有时会忘记字符串在内存中被空字节终止,并且在计算string.length()时不会被包含在内。 – Froobyflake