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

使用Ruby程序。输入:句子修改:单词输出:修改句子,ruby,string,Ruby,String,我对Ruby是新手。这是一个使用任何语言的编程面试问题。我正在尝试用Ruby做这件事 写一个程序来输入给定的句子。将每个单词替换为单词的第一个和最后一个字母/最后一个字母之间的字符的第一个字母/#。不应更改所有非字母(数字、标点符号等) 输入示例:2只公鸡有12只鸡 所需输出:T3e a1e 12 c6s f1r 2 r6s 我有这个概念,但需要更好的方法和如何将各部分组合在一起的帮助: s="There are 12 chickens for 2 roosters." .. =>

我对Ruby是新手。这是一个使用任何语言的编程面试问题。我正在尝试用Ruby做这件事

写一个程序来输入给定的句子。将每个单词替换为单词的第一个和最后一个字母/最后一个字母之间的字符的第一个字母/#。不应更改所有非字母(数字、标点符号等)

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

s = "There are 12 chickens for 2 roosters."
s.gsub(/([A-Za-z]+)/) { $1[0] + ($1.size - 2).to_s + $1[-1] }
它使用替换与正则表达式模式匹配的字符串的所有部分

本例中的模式为
/([A-Za-z]+)/
,并将一个或多个字符在A-z和A-z范围内的出现情况分组


{$1[0]+($1.size-2)。to_+$1[-1]}
是为每次出现执行的块<代码>$1是模式中匹配的第一组。块用它的第一个字符
$1[0]
,长度-2到字符串
($1.size-2)。到s
和最后一个字符
$1[-1]

如果我复制并粘贴到irb中,您的示例将不起作用。另外,它不考虑大小为1或2的单词。也许你想修复它?@fotanus你使用的是哪个版本的ruby?。它适用于1.9和2.0。当使用字符串索引时,1.8.7会显示char代码,但由于1.8.7将在6月份被弃用,因此我不会在这里提供修复。问题中没有给出一个字符的单词的规则,所以我不会在答案中包含一个。我使用的是ruby 1.8.7,它确实适用于其他单词。做你认为正确的事。