这个计算元音的Ruby程序有什么问题?

时间:2014-11-16 02:47:07

标签: ruby string count

当我在字符串上测试这个程序时,输出为0.我认为我的逻辑是合理的,它只是一个小的语法。有人看到问题吗?

def VowelCount(string)

  string.downcase
  i = 0
  vowels = 0

  until i == string.length-1
    if (string[i] == "a" || string[i] == "o" || string[i] == "e" || string[i] == "i" || string[i] == "u")
      vowels += 1
      end
    i += 1
    end
  return vowels
  end

2 个答案:

答案 0 :(得分:5)

您可以使用String#count

str = "It was the best of times, it was the worst of times,..."

str.downcase.count('aeiou') #=> 14

答案 1 :(得分:3)

以下一行

until i == string.length-1

应该是:

until i == string.length

否则,不检查最后一个字符。

顺便说一下,通过对流,方法名称以小写字母开头,并与下划线结合使用。这是使用正则表达式的替代解决方案。

def vowel_count(string)
  string.scan(/[aeiou]/i).length
end

<强>更新

正如JesseSielaff所指出的,String#downcase不会改变字符串。您需要返回方法的返回值或使用String.downcase!