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 に答える