Ruby:从String中过滤非整数

时间:2016-09-24 03:52:28

标签: ruby

尝试解决这个问题,你提供参数并需要提供匹配的输出。

  

将两个整数(i和n)作为命令行参数。将i写入标准输出,然后是以下n个整数(用逗号分隔)。

     

请勿在输出中包含空格或任何隐藏字符。

     
    

示例:参数:3 5输出:3,4,5,6,7,8

  

这是我的代码:

base_number = ARGV.shift.to_i
iterate_number = ARGV.shift.to_i

if iterate_number < 0
  base_number = base_number.to_s
  iterate_number = iterate_number.to_s
else
  print base_number
  iterate_number.times do
    base_number = base_number + 1
    print ','
    print base_number
  end
end

到目前为止,我已经设法抓住了7/9的测试。这包括当iterate_number为负时,输出返回空白。

最后两个测试涉及字母或空白的参数,两个都在变量i中解析,返回0,使我的输出为0而不是空白。

谢谢!

3 个答案:

答案 0 :(得分:2)

您使用times走在正确的轨道上,但是您错过了Ruby中的一个关键功能:利用枚举器并将其视为数组。

例如:

i = ARGV[0].to_i
n = ARGV[1].to_i

puts (i..i+n).to_a.join(', ')

这会设置一个简单的范围,将其转换为值数组,然后将这些值连接在一起。

如果您想测试某个值是否为“数字”,请尝试以下操作:

value.to_i.to_s == value

如果转换为整数并且返回时它是相同的,则保证它是一个整数值。

答案 1 :(得分:-1)

要检查i是否为字符串,您可以致电i.match(/^\d+$/),当它不是字符串时,它会返回false

答案 2 :(得分:-1)

当你说信或空白时,你的意思是"String"或``nil```?

您应首先检查输入是否为整数。

return nil unless iterate_number.is_a?(Integer)