将字符串中的索引字符转换为大写的ruby

时间:2015-03-23 17:04:10

标签: ruby

我需要将字符串中所有偶数索引字符转换为大写,而奇数索引字符保持小写。我试过这个,但它一直都在失败,我不知道为什么。我很感激一些帮助!

    for i in 0..string.length
      if (i % 2) == 0
        string[i].upcase
      else
        string[i].downcase
      end
    end

3 个答案:

答案 0 :(得分:2)

你去了:

string = "asfewfgv"

(0...string.size).each do |i|
  string[i] = i.even? ? string[i].upcase : string[i].downcase
end

string  # => "AsFeWfGv"

我们人们通常不会使用for循环,这就是我提供上述代码的原因。但这是你的正确版本:

string = "asfewfgv"

for i in 0...string.length  # here ... instead of ..
  string[i] = if (i % 2) == 0
                string[i].upcase
              else
                string[i].downcase
              end
end

string # => "AsFeWfGv"

你正确地做了,你只是忘了在 upcasing downcasing 之后重新分配字符串索引。

答案 1 :(得分:2)

"foobar".gsub(/(.)(.?)/){$1.upcase + $2.downcase}   # => "FoObAr"
"fooba".gsub(/(.)(.?)/){$1.upcase + $2.downcase}    # => "FoObA"

答案 2 :(得分:0)

您的代码有两个问题:

  • for i in 0..string.length应该是i in 0...string.length来评估最后一个字符string[string.length-1],而不是超过字符串的末尾(string[string.length]);和
  • string[i]必须是L值;也就是说,您必须拥有string[i] = string[i].upcase

您可以更正您的代码并使其更加惯用,如下所示:

string = "The cat in the hat"

string.length.times do |i|
  string[i] = i.even? ? string[i].upcase : string[i].downcase
end
string
  #=> "ThE CaT In tHe hAt"