【发布时间】:2017-05-03 17:00:53
【问题描述】:
我有两种解决方案可以在 Ruby 中反转字符串。一个打印 true 而另一个打印 false,但是,两者都打印出我想要的响应。
为什么有人说它是假的,即使它得到的答案与打印为真的解决方案相同?
以下是解决方案和测试:
def reverse(string)
new = ""
i = 0
length = string.length
while i < length do
new = new.to_s + string[-1, 1].to_s
string.chop!
if i >= string.length
break
end
end
puts new
end
def secondreverse(string)
new = ""
i = 0
length = string.length
while i < length do
new = string[i] + new
i += 1
end
return new
end
这些是检查代码是否正常工作的测试。编写解决方案后,它们都应该打印为 true。
puts("\nTests for #reverse")
puts("===============================================")
puts(
'secondreverse("abc") == "cba": ' + (secondreverse("abc") == "cba").to_s
)
puts(
'secondreverse("a") == "a": ' + (secondreverse("a") == "a").to_s
)
puts(
'secondreverse("") == "": ' + (secondreverse("") == "").to_s
)
puts("===============================================")
【问题讨论】:
-
我看到他们都返回
true。你得到了什么? -
使用
new作为变量名是个非常糟糕的主意。它最终会让其他使用代码的人感到困惑,包括你未来的自己。一般来说,使用更具描述性的名称,例如new_str,甚至是无处不在的retval。另外,请注意您正在使用的值的类型:new.to_s + string[-1, 1].to_s在字符串上使用两个to_s,这是多余的并且浪费 CPU 时间。string[-1, 1]尴尬;string[-1]将完成同样的事情。 -
另外,要小心。您的第一种方法是修改传入的字符串。您看不到传递文字字符串,但尝试传入一个变量,然后再检查它。因此,如果这是故意的,您应该在方法名称的末尾使用
!。
标签: ruby string reverse solution