2016-10-15 41 views
1

我有一個帶有字符串的數組。我需要檢查字符串是否包含字母「s」。如果是,我必須用「th」替換它。使用Ruby中的循環修改字符串

基本上就是這樣。

n = gets.to_i 
word = "" 
words = Array.new(n) 
for i in 1..n 
    word = gets 
    words.push(word) 
end 

for w in 1..words.size 
    for i in 0..word.length 
     if w[i] == "s" 
     w[i] = "th" 
     end 
    end 
end 

puts words 

它沒有替代(只是返回輸入),我不知道爲什麼。

+0

@tadman給出了一個很好的答案,但在將來考慮等待更長的時間才能選擇答案。快速選擇可能會阻止其他答案,並將仍在解答問題的答案短路。沒有急於。許多人在等待至少幾個小時之後才做出選擇,有些則等待更長時間。 –

回答

2

看起來你剛剛開始使用Ruby,所以這裏有一些提示。這裏最明顯的是使用for,這聽起來很奇怪,但幾乎從未在Ruby中使用過。枚舉器和朋友幾乎完全用於遍歷事物的目的,他們更好,因爲他們做的不僅僅是迭代。 each_with_indexeach_with_object是必不可少的。

你也使用了很多中間變量,它們並不真正爲任何函數提供服務,代碼將很多整理器合併在一起。

例如,從標準輸入得到單詞的列表:

words = $stdin.readlines.map(&:chomp) 

這需要在輸入的所有行和每一個運行chomp,除去任何換行符。

如果你想重新寫這個名單,以取代sth然後做到這一點:

words.map! do |word| 
    word.gsub(/s/, 'th') 
end 

gsub方法通常取代了正則表達式匹配的字符串。在這種情況下,它與字母s匹配。這些可能會變得更復雜,我強烈建議你看看他們,至少了解他們能做些什麼。這是一個棘手的,但巧妙的強大的工具,將始終派上用場。

記得Ruby有特殊的文檔。如果您有String類型的對象,則所有String方法都可以在API documentation中進行拼寫。不要害羞地檢查,那裏有很多非常有用的工具。

+0

'gsub(/ s /,'th')'而不是'gsub('s','th')'的任何原因? –

+1

@CarySwoveland更好地瞭解正則表達式,而不是一直困惑和害怕它們,就這些。試火! – tadman