2017-02-17 51 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