1

「文字による反転」は機能しますが、「単語による」3番目のテストは機能しません-

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
4

1 に答える 1

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ブロックの出力文字列の最後にもスペースを追加することをお勧めします。

于 2012-05-04T01:42:29.200 に答える