3

我是红宝石的新手。这是一个使用任何语言的编程面试问题。我正在尝试用 Ruby 来实现。

编写一个程序来输入给定的句子。用单词的 firstletter/#ofcharactersbetween1st&lastletter/lastletter 替换每个单词。不应更改所有非字母(数字、标点符号等)。

示例输入:2 只公鸡有 12 只鸡。

所需输出:T3e a1e 12 c6s f1r 2 r6s。

我有这个概念,但需要更好的方法以及如何将这些部分组合在一起的帮助:

   s="There are 12 chickens for 2 roosters." 
.. 
=> "There are 12 chickens for 2 roosters."
   a = s.split(" ")
=> ["There", "are", "12", "chickens", "for", "2", "roosters."]
   puts a.length
7
=> nil
   puts a[0].length
5
=> nil
   puts a[0].length-2
3
=> nil
   puts a[0][0]
84
=> nil
   puts a[0][0].chr
T
=> nil
   puts a[0].length-2
3
=> nil
   puts a[0][-1].chr
e
=> nil
4

1 回答 1

3

尝试这个:

s = "There are 12 chickens for 2 roosters."
s.gsub(/([A-Za-z]+)/) { $1[0] + ($1.size - 2).to_s + $1[-1] }

它使用gsubwhich 替换匹配正则表达式模式的字符串的所有部分。

在这种情况下,模式是/([A-Za-z]+)/对 AZ 和 az 范围内的一个或多个字符的出现进行分组。

{ $1[0] + ($1.size - 2).to_s + $1[-1] }是每次出现时执行的块。$1是模式中匹配的第一组。$1[0]该块用它的第一个字符、它的长度-2 到字符串($1.size - 2).to_s和它的最后一个字符来替换出现$1[-1]

于 2013-04-19T11:49:01.277 回答