1

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

这是我的代码:

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

谁能告诉我为什么我的代码不起作用?

4

2 回答 2

1

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

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

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
于 2016-05-30T05:39:02.883 回答
0
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")

会解决你的问题...

于 2016-05-30T05:51:34.523 回答