代码之家  ›  专栏  ›  技术社区  ›  Ryne Stajcar

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

  •  -1
  • Ryne Stajcar  · 技术社区  · 7 年前

    我试着用一个句子,颠倒每个单词中字母的位置。

    以下是我无法使用的代码:

    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 回复  |  直到 7 年前
        1
  •  4
  •   Mike Tunnicliffe    7 年前

    我认为您需要拆分,然后将数组的每个元素映射到其反向版本,然后将数组重新连接到字符串中:

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

    更简洁地使用符号进行处理(注释中的信贷@MarkThomas)

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

        2
  •  2
  •   Cary Swoveland    3 年前

    与将句子分解成单词、将每个单词颠倒然后重新连接的方法不同,使用 Array#gsub 使用正则表达式保留非单词字符(如下面示例中的逗号)和多个空格。

    "vieille, mère    Hubbard".gsub(/\b\p{L}+\b/, &:reverse)
      #=> "ellieiv, erèm    drabbuH"
    
        3
  •  0
  •   Andrew Thaddeus Martin    4 年前
    def reverse(str)
      str.split.map { |s| s.length < 5 ? s : s.reverse }.join(' ')
    end
    puts reverse ("this is a catalogy")
    

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