我编写了代码来获取一个字符串并返回相同的字符串,所有字母都更改为下一个字母,元音大写。 但是,当我尝试运行它时,元音似乎不像我期望的那样大写。
这是我的代码:
def LetterChanges(str)
str = str.downcase.split (" ")
str.each do |word|
i = 0
while i < word.length
word[i] = word[i].next
word[i].upcase! if word[i] =~ /[aeiou]/
i += 1
end
end
return str.join(" ")
end
LetterChanges("helo world")
谁能告诉我为什么我的代码不起作用?
当您通过 []
方法访问字符串的一部分时,您将返回一个新字符串,而不是指向字符串的该部分的指针。
您可以通过以下内容看到这一点:
str = "abcdefgh"
str[5] # "f"
str[5].upcase! # "F"
str # "abcdefgh"
upcase!
方法仅适用于新字符串 f
,调用 str[5]
时返回该字符串。 因为它是新字符串,与原始字符串分开,所以原始字符串保持不变。
相反,您可以使用以下内容:
def LetterChanges(str)
str.gsub(/[aeiou]/) {|letter| letter.next.upcase }
end
def LetterChanges(str)
str = str.downcase.split (" ")
str.each do |word|
i = 0
while i < word.length
word[i] = word[i].next
word[i] = word[i].upcase! if word[i] =~ /[aeiou]/
i += 1
end
end
return str.join(" ")
end
LetterChanges("helo world")
将解决您的问题...