ruby-on-rails 试图建立一个程序,打印的话是有一个偶数字符的基础上,在用户输入的话[关闭]

0dxa2lsx  于 2023-01-22  发布在  Ruby
关注(0)|答案(3)|浏览(108)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question

p "Enter a list of spaced words:"

user_in = gets.chomp,split

user_in.each_with_index do |element, index|

  if index.even?
  p element

end
end

这将返回一个错误。而且它只返回奇数的单词(元素),即使它写着:
如果索引,偶数?

9jyewag0

9jyewag01#

这一行有一处打字错误

gets.chomp,split

将逗号改为点

gets.chomp.split
wh6knrhe

wh6knrhe2#

@spickermann已确定您出错的原因。
在这种情况下,最好使用String #scan而不是String #split,因为split返回的数组中包含的某些字符串可能包含标点符号,如逗号和句点,在确定所包含单词的长度时必须考虑这些标点符号。
假设字符串中的任何字符'都是撇号,而不是单引号,则可以编写如下内容:

def print_evens(str)
  str.scan(/[a-z']+/i).each { |word| puts word if word.size.even? }
end
print_evens("Little Miss Muffet sat on a tuffet\n")
Little
Miss
Muffet
on
tuffet
print_evens("'Twas brillig, and the slithy toves, did gyre and gimble in the wabe\n")
slithy
gyre
gimble
in
wabe
print_evens("Quotation marks: how to use them \"correctly\"\n")
to
them

正则表达式/[a-z']+/i表示"匹配一个或多个(+)字母或撇号"。修饰符i规定字母的匹配不区分大小写。
请注意,不需要chomp

laximzn5

laximzn53#

除了逗号之外,你还需要检查单词的长度来检查它是否是偶数,现在你正在检查split返回的数组的索引。

user_in = gets.chomp.split
user_in.each do |item|
  puts item if (item.length.even?)
end

gets读取输入。chomp剪切行尾的多余字符。split通过检查空格从输入创建单词数组。item.length.even?检查单词是否包含偶数个字符。

相关问题