我需要在红宝石中进行猪皮运动

时间:2017-07-05 23:11:52

标签: ruby string

我需要检查单词是否以元音或辅音开头。对于以元音开头的单词,我需要广告" ay"到这个词的结尾。这部分很简单。我像这样管理它:

def translate string
  vowels = ["a", "e", "i", "o", "u"]
   if vowels.include? (string[0])
   string +'ay'
  else
   *the consonant part goes here*
  end
end

我需要有关辅音部分语法的帮助。如果一个单词以辅音开头,则将其移到单词的末尾,然后添加一个" ay"声音到了最后。 这是我在if语句的else部分尝试做的事情:

consonant = string(0)
new_word = string - string(0)
pig_latin_word = new_word << consonant << "ay"

谢谢。

2 个答案:

答案 0 :(得分:1)

一个优雅的解决方案是连接字符串的片段,使用与数组相同的语法,使用&#39; ay&#39;在一个整洁的衬里:

string[1..-1] + string[0] + 'ay'

答案 1 :(得分:1)

我想你想用string(0)做的是获取字符串中的第一个字符,在这种情况下你需要用方括号string[0]来做。

当您string - string[0]取出字符串中的第一个字符,并将其分配给名为new_word的变量时,您会获得undefined method - &#39; {{1对于这样的操作,当没有第一个字符时,你可以从字符串中取出一定数量的字符并将其分配给该变量,如:

error, that's because you can't use

这样就可以给出字符串中的字符,范围从1到最后一个元素(p 'the'[1..-1] # => "he" )。

我可以说,当你执行-1时,如果你只是pig_latin_word = new_word << consonant << "ay"最后一次评估的表达式,那么这样做会更容易,因为你没有使用{{1}变量,您可以使用return结尾插入变量,这将是方法返回的情况,即字符串的第一个字符不是小写的元音,所以,这样的东西会使你的代码工作:

pig_latin_word

但是我仍然不确定,你是否必须验证被传递的句子中的每个单词?在这种情况下会添加&#34; ay&#34;只是到了字符串的最后一个单词,如果单个单词被传递,那么它可以工作,但是使用"ay"这样的句子然后它会返回vowels = ["a", "e", "i", "o", "u"] if vowels.include? (string[0]) string +'ay' else consonant = string[0] new_word = string[1..-1] "#{new_word}#{consonant}ay" end

和/或在你检查字符串的第一个字符是否是元音的情况下,你只检查小写元音,如果它是一个大写的元音,它会使它看起来像: / p>

'the quick brown fox'

它会将您的"he quick brown foxtay"第一个字符移动到字符串的末尾并添加p translate('apple') # => "appleay" p translate('Apple') # => "ppleAay"

你可以做的是A你的字符串被作为参数传递 - 这样如果它是一个句子,你得到每个单词,如果是一个单词,那么它就可以了也是 - 并检查它们的每个第一个字符是否与元音,大写和小写相匹配,如果是,那么你只返回aysplit,如果不是,然后你得到单词中的每个字符,从这个数组中生成,并将它们旋转一个字符,这样如果传递的字符串是word,你得到"ay",那么它就是一个字符数组,您加入它们并添加'the quick brown fox'结尾,然后添加&#34;映射&#34;你使用join来连接每个单词的空格,如:

"het uickq rownb oxf"