You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby新手求助:如何统计输入文本中各元音的出现次数

解决Ruby统计每个元音出现次数的问题

先看你代码里的几个问题:

  • 变量名写错了:vocals应该是你定义的vowels,但就算改了,循环对象也错了——你应该遍历输入文本的每个字符,而不是元音数组。
  • 只定义了a_count,没法统计e、i等其他元音。
  • return a_count放在for循环里,第一次循环就直接返回了,根本跑不完整个循环。
  • 方法参数phrase被你重新赋值成输入内容,传入的ARGV根本没用到,逻辑混乱。

要分别统计每个元音的数量,用哈希来存每个元音的计数最方便,直接看修正后的代码:

def count_vowels
  puts 'Enter a text:'
  phrase = $stdin.gets.downcase.chomp
  # 初始化哈希,每个元音初始计数为0
  vowel_counts = { 'a' => 0, 'e' => 0, 'i' => 0, 'o' => 0, 'u' => 0 }

  phrase.each_char do |char|
    # 如果当前字符是元音,对应计数+1
    vowel_counts[char] += 1 if vowel_counts.key?(char)
  end

  # 输出每个元音的统计结果
  vowel_counts.each do |vowel, count|
    puts "#{vowel} = #{count}"
  end
end

count_vowels

代码说明:

  • 用哈希vowel_counts预先定义好所有元音的初始计数为0,这样能直接对应每个元音的统计结果。
  • 遍历输入文本的每个字符,判断是否是哈希里的键(也就是元音),是的话对应计数加1。
  • 最后遍历哈希,输出每个元音和它的出现次数。

如果你想保留从参数传入文本的逻辑(比如用ARGV),可以改成这样:

def count_vowels(phrase)
  phrase = phrase.downcase
  vowel_counts = { 'a' => 0, 'e' => 0, 'i' => 0, 'o' => 0, 'u' => 0 }

  phrase.each_char do |char|
    vowel_counts[char] += 1 if vowel_counts.key?(char)
  end

  vowel_counts.each do |vowel, count|
    puts "#{vowel} = #{count}"
  end
end

# 如果ARGV有传入参数,就用参数;否则提示输入
if ARGV.empty?
  puts 'Enter a text:'
  input_phrase = $stdin.gets.chomp
  count_vowels(input_phrase)
else
  count_vowels(ARGV.join(' '))
end

这样既支持命令行传参,也支持手动输入,灵活度更高。

内容的提问来源于stack exchange,提问作者Alexandroskw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.06 20:03:08