Ruby-Methode zum Umkehren von Zeichen, die nicht für Wörter rekursiv sind - Ruby

Das "Reverse by Characters" funktioniert, aber der dritte Test "by words" funktioniert nicht.

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

Antworten:

2 für die Antwort № 1

Das Problem ist in dieser Schleife:

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

Der Else-Block kehrt das aktuelle Wort um und fügt hinzuEs wird in der Ausgabezeichenfolge ausgeführt, aber es wird nur ausgeführt, wenn die Schleife auf ein Leerzeichen trifft. Da am Ende der Zeichenfolge kein Leerzeichen steht, wird das letzte Wort niemals zur Ausgabe hinzugefügt. Sie können dies beheben, indem Sie hinzufügen new_string+= reverse_itti(word, "by_character") nach dem Ende der Schleife.

Wahrscheinlich möchten Sie auch am Ende der Ausgabezeichenfolge im else-Block ein Leerzeichen einfügen.


Am beliebtesten