这是一个超级基本的红宝石问题。刚学习红宝石,我正在尝试构建一个盒子,它找到字符串中最长的单词,并使宽度为两边有空格的框,然后将我传入的所有其他文本居中。
到目前为止,我有这个;def box(str)
arr = str.split
wordlength = arr.max_by(&:length).length
width = wordlength + 4
width.times{print "*"}
puts "\n"
arr.each {|i| puts "* #{i} *" }
width.times{print "*"}
end
但以上打印出来:
***********
* texting *
* stuff *
* test *
* text *
***********
我想要打印类似下面的内容
***********
* texting *
* stuff *
* test *
* text *
***********
感谢
答案 0 :(得分:0)
此处,此代码有效:
def box(str)
arr = str.split
wordlength = arr.max_by(&:length).length
width = wordlength + 4
width.times{print "*"}
puts "\n"
arr.each do |i|
current_length = i.length
puts "* #{fill_space(current_length, wordlength, 'pre', i)}#{i}#{fill_space(current_length, wordlength, 'post')} *"
end
width.times{print "*"}
end
def fill_space(current_length, max_length, where, current='')
spaces_to_fill = max_length - current_length
if where == 'pre'
str = ' ' * (spaces_to_fill / 2)
elsif spaces_to_fill % 2 > 0
str = ' ' * (spaces_to_fill / 2 + 1)
else
str = ' ' * (spaces_to_fill / 2)
end
end
问题是,您没有计算应该在当前行中插入多少“”。在fill_space函数中,我精确地计算了这个函数,并且我为每个应该打印的行调用了这个函数。此外,如果有奇数字,此功能会在行的末尾添加额外的空格 我没有改变你的盒子功能,但可以随意插入Keith给你的提示