2015-03-23 3 views
0

Мне нужно преобразовать все четные индексы в строке, чтобы они заглавными, а символы с нечетным индексированием оставались в нижнем регистре. Я пробовал это, но он продолжает терпеть неудачу, и я не уверен, почему. Буду признателен за помощь!Преобразование даже индексированных символов в строку в верхний регистр ruby ​​

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

ответ

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.

+0

Я ценю вашу помощь, но по какой-то причине это не работает для меня – Mitch

+0

@Mitch .. Пожалуйста, смотрите сейчас .. Я сделал _big_ беспорядок в моем предыдущем .. –

+0

gotcha благодарю вас за помощь! – Mitch

2
"foobar".gsub(/(.)(.?)/){$1.upcase + $2.downcase} # => "FoObAr" 
"fooba".gsub(/(.)(.?)/){$1.upcase + $2.downcase} # => "FoObA" 
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" 
Смежные вопросы