我是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
答案 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]
。