2012-04-15 88 views
0

在我的程序中,我想爲字符串中的雙字母添加方法。我的問題是有一個公開的方法呢?例如:ruby​​字符串方法

'The'TThhee'

這是我有:

puts "Please enter text: " 
input = gets 
letters = input.chomp.to_s 
puts "You entered: " + letters + "." 

list_letters = letters.split(//) 
list = list_letters.join(". ")* 2.to_i 

puts "Your text is made up of the letters: " + list + "." 

回答

4
letters.gsub(/(.)/, '\1\1') 

甚至更​​短:

letters.gsub(/./, '\&\&') 

有點更舒適:

class String 
    def char_duplicate 
    self.gsub(/./, '\&\&') 
    end 
end 

puts "abc".char_duplicate #aabbcc 
puts "abca".char_duplicate #aabbccaa 

你的示例代碼,使不同的東西。也許你想要做這樣的事情:

letters.split(//).map{|x| x * 2 }.join 

letters.each_char.map{|x| x * 2 }.join 
+2

'GSUB(/./, '\&\&')'消除了對比賽的需要組。 – 2012-04-15 21:35:40

+0

@AndrewMarshall謝謝,我通過了我的回答 – knut 2012-04-15 21:45:44

1

你可以做到這一切在一個單一的線,即使有點做作。我去注射,因爲我認爲不重複的空間會很好。

>> "foo bar".chomp.split("").inject([]) { |a,l| l =~ /\S/ ? a << l*2 : a << l }.join("") 
=> "ffoooo bbaarr" 

編輯:關於第二個想法,你也可以只

>> "foo bar".gsub(/\S/, '\&\&') 
=> "ffoooo bbaarr" 

正好說明我如何紅寶石最近很少做=)

0

我會做這個作爲@knut一樣。爲了好玩品種,但是,這裏有一些更多:

irb(main):002:0> s.chars.map{ |c| c*2 }.join 
#=> "TThhee" 

irb(main):004:0> s.chars.zip(s.chars).join 
#=> "TThhee" 

irb(main):005:0> s.chars.inject(""){ |d,c| d << c << c } 
#=> "TThhee" 

irb(main):010:0> "".tap{ |d| s.each_char{ |c| d << c*2 } } 
#=> "TThhee" 
3

只要是不同的:

(['The'.each_char.to_a]*2).transpose.join