我是Ruby的新手。我正在尝试制作一些简单的计算器程序。所以,基本上它应该做的是你输入类似的东西 4 + 2 它输出6.简单,对吧?所以我认为。我正试图在所有操作字符上分割一个字符串,所以我让这个快速的正则表达式认为它会起作用。它没有。
class Calculator
def add(a,b)
return a+b
end
def sub(a,b)
return a-b
end
def div(a,b)
return a/b
end
def mul(a,b)
return a*b
end
end
operation = gets.split("[\/\+\-\*]")
print(operation)
sleep()
sleep()是暂停控制台所以我可以看看我的输出。但是现在,它正在输出["4+2\n"]
??我不知道我做错了什么。我需要一些帮助。 (它应该输出["4","+","2"]
)。提前谢谢。
答案 0 :(得分:2)
您不需要转义角色类中的每个角色。请考虑以下事项:
operation = gets.gsub(/[^\d\/*+-]/, '').split(/([\/*+-])/)
或
operation = gets.split(/([\/*+-])/).map(&:strip)
答案 1 :(得分:1)
对于正则表达式,您要使用/
而不是"
:
operation = gets.split(/[\/\+\-\*]/) # ["4", "2\n"]
使用条带删除了一个额外的换行符:
operation = gets.strip.split(/[\/\+\-\*]/) # ["4", "2"]
但是我们失去了运营商。查看split的文档:
如果pattern包含组,则将返回相应的匹配项 在数组中也是如此。
在我们的正则表达式中添加()
会创建一个组。那么我们就有了:
operation = gets.strip.split(/([\/\+\-\*])/) # ["4", "+", "2"]
答案 2 :(得分:0)
您可以尝试以下代码。
operation = gets.chomp.gsub(/[\/\+\-\*]/, ';\0;').split(";")
print(operation)
执行结果:
4+2/3*9-0
["4", "+", "2", "/", "3", "*", "9", "-", "0"]