Ruby迭代字符串

时间:2016-04-03 06:50:07

标签: ruby string

我试图遍历元音"aeiou"并向前移动每个字母,返回字符串"eioua"。这是我的代码:

def vowel(letter)
  vowels = "aeiou"
  string = ""
  index = 0
  while index < letter.length
    current_id = vowels.index(letter)
    next_vowel = vowels[current_id + 1]
    string += next_vowel
    index += 1
  end
  string
end

当我将"aeiou"作为参数传递给我的方法时,只需"a",然后打印"eeeee"

vowel("aeiou") # => "eeeee"

2 个答案:

答案 0 :(得分:2)

您始终附加由索引current_id = vowels.index(letter)找到的元音(增加1)。这就是代码将ea旁边)追加五次的原因。 index变量仅用作循环计数器。

此代码还有另一个小问题:当letter是最后一个时,current_id是最后一个字母的索引,vowels[current_id + 1]nil

目前我无法为此问题提供解决方案,因为描述和预期结果不一致:“向前移动每个字母”不会在给定输入上产生"eioua"

答案 1 :(得分:1)

如果你想旋转单词的字母(并形成一个新单词,而不是修改单词),可以采用以下方法:

str = "aeiou"

new_str = str.chars.rotate.join.   #=> "eioua" 
str                                #=> "aeiou" 

如果您希望修改字符串:

str.object_id.                     #=> 70128532752540 
str.replace(str.chars.rotate.join) #=> "eioua"
str                                #=> "eioua" 
str.object_id                      #=> 70128532752540