使用Ruby程序。输入:句子修改:单词输出:修改句子

时间:2013-04-19 11:34:06

标签: ruby string

我是Ruby新手。这是一个使用任何语言的编程面试问题。我想用Ruby做。

编写程序以输入给定的句子。将每个单词替换为单词的firstletter /#ofcharacters between1st& lastletter / lastletter。不应更改所有非alpha(数字,标点符号等)。

示例输入: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

1 个答案:

答案 0 :(得分:3)

试试这个:

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

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

此案例中的模式为/([A-Za-z]+)/,并在A-Z和a-z范围内对一个或多个字符的出现进行分组。

{ $1[0] + ($1.size - 2).to_s + $1[-1] }是每次出现时执行的块。 $1是该模式中匹配的第一个组。该块将该事件替换为其第一个字符$1[0],其长度-2替换为字符串($1.size - 2).to_s及其最后一个字符$1[-1]