Ruby-str.upcase不是';I don’我不能在一段时间内工作

Ruby-str.upcase不是';I don’我不能在一段时间内工作,ruby,loops,while-loop,upcase,Ruby,Loops,While Loop,Upcase,我已经编写了代码来获取一个字符串并返回相同的字符串,所有字母都改为下一个,元音大写。然而,当我尝试运行它时,元音似乎不像我预期的那样大写 这是我的代码: def LetterChanges(str) str = str.downcase.split (" ") str.each do |word| i = 0 while i < word.length word[i] = word[i].next

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

这是我的代码:

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")
def字体更改(str)
str=str.downcase.split(“”)
str.每个do |字|
i=0
而我

有人能告诉我为什么我的代码不工作吗?

当您通过
[]
方法访问字符串的一部分时,您返回的是一个新字符串,而不是指向该部分字符串的指针

您可以通过以下方式看到这一点:

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字体更改(str)
str=str.downcase.split(“”)
str.每个do |字|
i=0
而我

将解决您的问题…

您能提交所给示例的所需输出吗?@sagarpandya2在这种情况下所需输出将是“Ifmp xpsmE”啊。。。。我现在明白了。因此,如果我要使用
,则不使用gsub。每个
都将是被修改的相同字符串
gsub
根据提供给它的正则表达式在字符串中查找匹配项。块返回的值是匹配项所替换的值
gsub
不是修改原始字符串,而是返回替换了匹配位的新字符串。
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")