我需要将字符串中所有偶数索引字符转换为大写,而奇数索引字符保持小写。我试过这个,但它一直都在失败,我不知道为什么。我很感激一些帮助!
for i in 0..string.length
if (i % 2) == 0
string[i].upcase
else
string[i].downcase
end
end
答案 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"