2015-10-20 25 views
0

我正在做一項任務,所以請不要直接爲我解決這個問題。
我需要採取ugly_ouput這裏將是=> 1x^3+-2x^2+3x^1+4x^0+並使其=> x^3-2x^2+3x+4。我知道我需要使用正則表達式,但我無法使我的make_pretty方法合作。全部。即使試圖找到所有的x,並用y替換它們也不起作用。你能否指點我正確的方向?無法獲取gsub!和正則表達式來工作我的方法

class Polynomials 

def initialize coefficient 
    @coefficient = coefficient 
end 

def ugly_output 
    exponent = @coefficient.length - 1 

    @coefficient.each do |i| 
     unless i == 0 
     print "#{i}x^#{exponent}+" 
     exponent -= 1 
     end 
    end 

end 

def make_pretty 
# get rid of 0's, +-, and ^1 when they appear in output 

    ugly_output.to_s.gsub!(/\+-/, "-") 
end 

end 

#polynom = Polynomials.new [1, -2, 3, 4] 
polynom = Polynomials.new [-3, -4, 1, 0, 6] 


polynom.make_pretty 

的分配規則:
- 如果係數爲1,它不會打印
- 如果係數爲負,你必須顯示類似-2x^3,不+-2x^3
- 如果係數爲0,沒有被添加到^1部分被省略
輸出
- 用於x^1 - x^0 == 1,所以我們並不需要d isplay it

+3

您的ugly_output是直接打印結果,打印什麼,打印出來,以後不能更改。 – Meier

+0

因爲係數是'1',請檢查'@係數'是否爲'1',只是在沒有'i'的情況下打印。你不需要任何一種正則表達式。 –

+0

@Meier,你是對的。編輯:如果您已閱讀我的評論,請忽略它。 –

回答

0

首先 - 我不是紅寶石,但當我谷歌紅寶石和gsub/gsub!它看起來像你應該使用gsub - 而不是gsub! - 在這種情況下。

而且(在某種元語言的描述此;)我解決了這個使用一個正則表達式替換任什麼也沒有你的條件,即

gsub(regex, "") 

其中正則表達式是

cond1 | cond2 | cond3 | cond4 | cond5 

你」已經觸及了其中一個條件 - +-。要匹配+並保留-,您必須使用預覽。這就好比

\+(?=-) 

做該(引)+相匹配,並確保它的後面是-。將此替換爲""可取消+保留-

然後以同樣的方式添加其他條件(CN),你會喜歡的東西

ugly_output.to_s.gsub(/\+(?=-)|C2|C3|C4|C5/, "") 

在這裏,你會做你的工作結束了;)

希望這是對你有幫助。

編輯:

在卡里的點(在評論),\b這裏是你的朋友。它確保有一個邊界相鄰。即如果您測試的是邊界,然後是數字,則可以確保數字前面是除單詞字符(其中包含數字)之外的其他內容。拼寫出來 - \b1匹配+1但不是+21

問候。

+0

我知道你不想過分關注正則表達式,但是你可能想說一下區分'1x'和'21x'以及'0x'和'30x'(以及指數)之間的區別。此外,還可以選擇使用單獨的'gsub'處理'+ -',在這種情況下,不需要預覽。 –

+0

@CarySwoveland First - Nathan ... **不要欺騙**! ;)對於任何對我的實際解決方案感興趣的人,加上Cary's * challange *的附加案例,這裏是我如何做的regex101。 [不要看這裏,Nathan](https://regex101.com/r/cP0iP0/3) – ClasG

+0

@CarySwoveland另外,你當然可以將它分成五個不同的'gsub'。事實上,這可能會提高可讀性。 – ClasG

相關問題