【发布时间】:2015-12-11 18:37:43
【问题描述】:
我正在尝试创建一个将字符串作为输入的方法,如果字符串包含one、two、three、four、five、six、seven 、eight 或 nine 将它们计为整数并将它们相加,例如:
secret_code("one on one") #=> 2
secret_code("five monkeys in three farms") #=> 8
secret_code("") #=> 0
secret_code("fivethreeone") #=> 0
我想将给定的字符串按单词拆分并将它们放入一个数组中,以便我可以对其进行迭代并检查位置i 处的元素是否等于一个数字,并将其对应的值添加到一个变量中。到目前为止,这是我的代码:
def secret_code(a)
arr = a.split(/\W+/)
i = 0
l = arr.size
num = 0
puts arr
if !arr.any?
0
end
while i < l do
case arr
when arr[i] == "one"
num += 1
exit
when arr[i] == "two"
num += 2
exit
when arr[i] == "three"
num += 3
exit
when arr[i] == "four"
num += 4
exit
when arr[i] == "five"
num += 5
exit
when arr[i] == "six"
num += 6
exit
when arr[i] == "seven"
num += 7
exit
when arr[i] == "eight"
num += 8
exit
when arr[i] == "nine"
num += 9
exit
end
i+=1
end
puts num
end
secret_code("one on one") #=> 2
secret_code("five monkeys in three farms") #=> 8
secret_code("") #=> 0
secret_code("fivethreeone") #=> 0
我不太确定如何遍历数组。现在它为所有内容打印0。
【问题讨论】:
-
您的
case语句似乎有一些缺陷 - 看看这个 - How to write case statement in Ruby - 不要使用exit- 它会过早退出程序。如果你修复你的case并摆脱exit,你会更正输出 -
为什么急于选择答案?这样做可能会阻止其他有趣的答案,而且在您做出选择时,对于仍在研究他们的答案的读者来说,这是不体谅的。许多 SO 成员至少要等几个小时——有时甚至更长——才能做出选择。
-
很多人要等几天。好的答案需要一段时间才能创建,而且回答的人分布在全球各地,或者每隔几天才上一次 Stack Overflow。
-
基本问题在重复问题的选择答案中得到回答。这个问题的其余部分是如何匹配单词来决定什么是“数字词”,什么不是,这很容易用一个散列或可接受值的数组来完成。