2012-05-04 2 views
1

'реверс от персонажей произведений, но третий тест «словами» не -метод рубин отменить символы не рекурсии слов

expected: "sti gniniar" 
    got: "sti" (using ==) 

def reverse_itti(msg, style='by_character') 

    new_string = '' 
    word = '' 

    if style == 'by_character' 
    msg.each_char do |one_char| 
     new_string = one_char + new_string 
    end 
    elsif style == 'by_word' 
    msg.each_char do |one_char| 
     if one_char != ' ' 
     word+= one_char 
     else 
     new_string+= reverse_itti(word, 'by_character') 
     word='' 
     end 
    end 
    else 
    msg 
    end 
    new_string 
end 

describe "It should reverse sentences, letter by letter" do 

    it "reverses one word, e.g. 'rain' to 'niar'" do 
    reverse_itti('rain', 'by_character').should == 'niar' 
    end 
    it "reverses a sentence, e.g. 'its raining' to 'gniniar sti'" do 
    reverse_itti('its raining', 'by_character').should == 'gniniar sti' 
    end 
    it "reverses a sentence one word at a time, e.g. 'its raining' to 'sti gniniar'" do 
    reverse_itti('its raining', 'by_word').should == 'sti gniniar' 
    end 

end 

ответ

2

Проблема в этом цикле:

msg.each_char do |one_char| 
    if one_char != ' ' 
    word+= one_char 
    else 
    new_string+= reverse_itti(word, 'by_character') 
    word='' 
    end 
end 

Блок else отменяет текущее слово и добавляет его в выходную строку, но он запускается только тогда, когда цикл встречает символ пробела. Поскольку в самом конце строки нет места, последнее слово никогда не добавляется к выходу. Вы можете исправить это, добавив new_string+= reverse_itti(word, 'by_character') после окончания цикла.

Кроме того, вы, вероятно, захотите также добавить пробел в конец выходной строки в блоке else.

Смежные вопросы