Ruby - str.upcase 在一段时间循环中不起作用



我编写了代码来获取一个字符串并返回相同的字符串,所有字母都更改为下一个字母,元音大写。 但是,当我尝试运行它时,元音似乎不像我期望的那样大写。

这是我的代码:

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")

将解决您的问题...

最新更新