对于以下项目,我应该采用以下格式输入:R1C5 + 2,将其读作“在表中,第1行第5列,添加2.或者以这种格式:R1C2C3-5,其中读取:“在表格中,第1行第2-3列,减去5.这假设表格中的所有数字最初都是0。
我离开的地方:
我无法找到检测“+”或“ - ”的方法来添加/减去表中的值。此外,在提供两个C或R时允许多次添加的范围。例如:R1R5C2C3 + 2(行范围1 - 5,列范围2 - 3,添加2)。
以下是代码:
puts 'Please input: '
x = gets.chomp
col = []
row = []
x.chars.each_slice(2) { |u| u[0] == "R" ? row << u[1] : col << u[1] }
p col
p row
puts "Largest # in Row array: #{row.max}"
puts "Largest # in Columns array: #{col.max}" #must be in "" to return value
big_row = row.max.to_i
big_col = col.max.to_i
table = Array.new (big_row) { Array.new(big_col) }
答案 0 :(得分:0)
您正在寻找的方法是=~
运算符。如果你在字符串上使用它并给它一个正则表达式模式,它将返回该字符串中该模式的位置。因此:
x = 'R1C2C3-5'
x =~ /R/
返回:0
,因为那是字符串中'R'的位置(就像数组0,1,2 ......一样计算)。
如果您不熟悉regexp和=~
运算符,我建议您查看Ruby文档,它非常有价值。基本上正斜杠之间的模式匹配。您希望匹配+
或-
,但它们在regexp中具有特殊含义,因此您必须使用反斜杠转义它们。
x =~ /\+/
x =~ /\-/
但您可以将它们组合成一个带有OR符号(管道)|
x =~ /\+|\-/
所以现在你有了一个方法来获得运营商:
def operator(my_string)
r = my_string.slice(my_string =~ /\+|\-/)
end
我还会使用运算符将字符串拆分为列/行部分和数字部分:
op = operator(x) # which returns op = '-'
arr = x.split(my_string(x)) # which returns an array of two strings ['R1C2C3', '5']
我将进一步的字符串操作留给您。我将在String类上阅读这个页面:Ruby String Class,这在数组:Ruby Array Class上,因为Ruby包含了很多方法来使这样的事情变得更容易。我学会用Ruby做的一件事是想“我想这样做,我想知道是否已经有一个内置的方法来做这个?”我去检查文档。使用Rails更是如此!