2014-02-16 45 views
0

對於這個下面的項目,我應該採用以下格式的輸入:R1C5 + 2,它讀取爲「在表格中,第1行第5列,添加2.或以這種格式:R1C2C3-5,讀取:「在表中,排一月2日至三日列,減去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

你正在尋找的方法是=~操作。如果你在一個字符串上使用它,並給它一個正則表達式模式,它將返回該模式在字符串中的位置。因此:

x = 'R1C2C3-5' 

x =~ /R/ 

返回:0,因爲這是「R」的字符串中的位置(計就像陣列0,1,2 ...)。

如果您不熟悉regexp和=~運算符,我建議您查看它的Ruby文檔,它非常有價值。基本上,正斜線之間的模式匹配。你正在尋找匹配+-,但它們在正則表達式中有特殊的含義,所以你必須用反斜槓來轉義它們。

x =~ /\+/ 
x =~ /\-/ 

,但可以結合使用這些成一個模式匹配有或符號(管)|

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更是如此!

相關問題