有人可以给我建议如何用星号代替字母的数量吗?

时间:2018-12-31 15:37:29

标签: ruby

这是我的代码,并在下面输出,我想使用它,以便与其说出多少次,不如说输出字母以星号形式出现的次数。

例如,如果“ a”在一个句子中出现四次,则输出将产生: "a": ****

the_file='C:\Users\Jack\Documents\Ruby\Lab1\lyric.txt'
h = Hash.new
f = File.open(the_file, "r")
f.each_line { |line|
  words = line.split(//)
  words.each { |w|
    if h.has_key?(w)
      h[w] = h[w] + 1
    else
      h[w] = 1
    end
  }
}

# sort the hash by value, and then print it in this sorted order

h.sort{|a,b| a[1]<=>b[1]}.each { |elem|
  puts "\"#{elem[0]}\" : #{elem[1]} occurrences"
}

我当前程序和输出的屏幕截图 enter image description here

4 个答案:

答案 0 :(得分:2)

您只需编写#{elem[1]} occurences即可代替#{'*' * elem[1]}

有关更多详细信息,请参见method description

答案 1 :(得分:2)

我想展示另一种可能的替代方法来实现字数统计。 分开阅读文件,让我们考虑以下字符串:

gcc
  • 使用$ gcc -E your_program.c 初始化哈希可以让您开始计数而无需检查键是否存在:Hash#default
  • 在行上遍历String#each_char
  • 我只算出不区分大小写的字母
  • 要进行排序,请使用Hash#to_a
  • 将散列更改为数组
  • 用于打印直方图,如其他帖子中所示

答案 2 :(得分:0)

puts "\"#{elem[0]}\": " + '*' * elem[1]

+表示串联,string * number将重复某些字符串number次。

答案 3 :(得分:0)

使用Ruby中的字符串,您可以对它们使用数学运算符。因此,您知道字母出现了多少次(在elem[1]中)。在这种情况下,您可以将星号乘以该数量:

"\"#{elem[0]}: #{'*' * elem[1]}\""