【发布时间】:2017-08-02 15:33:20
【问题描述】:
我完成了一项包含以下说明的作业:
伪编码并编写一个方法,该方法采用间谍的真实姓名(例如,“Felicia Torres”)并通过执行以下操作创建一个假名:
交换名字和姓氏。 将所有元音(a、e、i、o 或 u)更改为 'aeiou' 中的下一个元音,并将所有辅音(除元音之外的所有其他字母)更改为字母表中的下一个辅音。
我的解决方案:
@vowels = %w(a e i o u)
@consonants = ("a".."z").to_a - @vowels
def next_vowel(letter)
i = 0
while i < @vowels.length
if @vowels[i] == "u"
return @vowels[0]
elsif @vowels[i] == letter
return @vowels[i+1]
end
i += 1
end
end
def next_consonant(letter)
i = 0
while i < (@consonants.length)
if @consonants[i] == "z"
return @consonants[0]
elsif @consonants[i] == letter
return @consonants[i + 1]
end
i += 1
end
end
def alias_manager(name)
name.downcase!
first_name = name.split(" ")[0]
last_name = name.split(" ")[1]
alias_first_name = last_name.chars.map do |i|
if @vowels.include?(i)
next_vowel(i)
elsif @consonants.include?(i)
next_consonant(i)
end
end
alias_last_name = first_name.chars.map do |i|
if @vowels.include?(i)
next_vowel(i)
elsif @consonants.include?(i)
next_consonant(i)
end
end
alias_first_name.join.capitalize! + " " + alias_last_name.join.capitalize!
end
我正在尝试用一种更简洁的方式来写这篇文章。 “while”循环似乎不是最有效的方法。我正在考虑使用“旋转”,但不确定如何替换字符串中的字母。另外,有没有办法重构 first_name 和 last_name 的最后一个迭代?我基本上为不同的变量写了两次相同的东西。
【问题讨论】:
标签: arrays ruby string while-loop rotation