取一个字符串,翻转每个单词中的字母,同时将单词保留在原始位置

时间:2018-01-04 17:33:32

标签: arrays ruby reverse string-interpolation

我正在尝试一个句子,并反转每个单词中字母的位置。

以下是我的代码不起作用:

def test(sentence)
 array = []
 array << sentence.split
 array.collect {|word| word.reverse}
end

我的问题是:

array << sentence.split

它说它划分每个单词,但是当我使用插值时,它会反转整个句子。下面是一个类似的代码:

def test2
 dog = ["Scout", "kipper"]
 dog.collect {|name| name.reverse}
end

但它不接受一个句子,它已经定义了数组。

3 个答案:

答案 0 :(得分:3)

我想你要拆分,然后将数组的每个元素映射到其反转版本,然后将数组重新加入字符串:

def test(sentence)
  sentence.split.map {|word| word.reverse}.join(" ")
end

使用symbol-to-proc更简洁(在评论中记下@MarkThomas)

sentence.split.map(&:reverse).join " "

答案 1 :(得分:0)

您可以使用正则表达式,避免将句子分解为单词,反转单词并重新加入。

"vieille mère Hubbard".gsub(/\w\p{L}+\w/) { |s| s.reverse }
   #=> "ellieiv erèm drabbuH"

答案 2 :(得分:0)

def reverse(str)
  str.split.map { |s| s.length < 5 ? s : s.reverse }.join(' ')
end
puts reverse ("this is a catalogy")

这应该使长度不超过5的每个单词颠倒