以单词作为运算符的PHP计算器
我被困在解析PHP脚本中 我想根据一组指令计算一个结果。指令由关键字和数字组成,每行用空格分隔。指令从文件加载,结果输出到屏幕。可以指定任意数量的指令。指令是运算符(加、除、减、乘)。这些指令将忽略数学优先级。最后一条指令应该是“应用”和一个数字(例如,“应用3”)。然后用该数字初始化计算器,并将前面的说明应用于该数字以单词作为运算符的PHP计算器,php,jquery,class,Php,Jquery,Class,我被困在解析PHP脚本中 我想根据一组指令计算一个结果。指令由关键字和数字组成,每行用空格分隔。指令从文件加载,结果输出到屏幕。可以指定任意数量的指令。指令是运算符(加、除、减、乘)。这些指令将忽略数学优先级。最后一条指令应该是“应用”和一个数字(例如,“应用3”)。然后用该数字初始化计算器,并将前面的说明应用于该数字 [Input] add 2 multiply 3 apply 3 [Output] 15 [解释] (3+2)*3=15 范例 [Input] multiply 9 apply
[Input]
add 2
multiply 3
apply 3
[Output]
15
[解释]
(3+2)*3=15
范例
[Input]
multiply 9
apply 5
[Output]
45
有人能帮我介绍一些示例逻辑或代码吗
这就是我迄今为止所尝试的:
class calculator {
public
function calculate($expression) {
$expression = str_replace(' ', '', $expression);
return $this - > exec($expression);
}
private
function exec($expression) {
switch ($expression['op']) {
case 'add':
$r = $expression[0] + $expression[1];
break;
case 'subtract':
$r = $expression[0] - $expression[1];
break;
case 'multiply':
$r = $expression[0] * $expression[1];
break;
case 'divide':
$r = $expression[0] / $expression[1];
break;
}
return $r;
}
private
function parseExpression($expression) {
$blankspace = preg_match('/\s/', $expression);
$counter = count($expression);
}
}
我会这样说:
class Calculator {
public $result = 0;
public $queue = Array();
public parseString($text) {
// parse input string
$cmds = explode(" ", $text);
foreach($cmds as $cmd) {
$cmd = trim($cmd);
if(!$cmd) continue; // blank or space, ignoring
$this->queue[] = $cmd;
}
// lets process commands
$command = false;
foreach($this->queue as $index => $cmd) {
if(is_number($cmd)) {
// if it's number fire previous command if exists
if(!$command || !method_exists($this, $command)) {
throw new Exception("Unknown command $command");
}
$this->$command($index, $cmd);
}else{
$command = $cmd;
}
}
}
public function apply($index, $number) {
// manipulate $result, $queue, $number
}
public function add($index, $number) {
// manipulate $result, $queue, $number
}
public function substract($index, $number) {
// manipulate $result, $queue, $number
}
}
$calculator = new Calculator();
$calculator->parseString('...');
这只是一个你如何做到的例子,但这是你的工作:)
您需要添加一些方法,如
clearQueue
,clearResult
,setResult
等。所以基本上是从左到右,除了在前面粘贴“apply X”之外?那么输入的范围是什么呢?raekye谢谢你的时间,输入是textarea每条指令都在一行中,下一条指令必须在新行中(例如:乘以5,然后新行加6,然后新行应用3)我如何实现这一点你尝试过什么?似乎你只是在请别人为你编写代码。我已经用我迄今为止尝试过的方法更新了代码,但我可以纠正逻辑谢谢samuel提供了jquer解决方案谢谢peter,我如何触发apply或divide方法?我是phpbefore的初学者。//让我们处理命令
您应该按自定义优先级对$queue排序,而应用
应该是第一位。方法apply应该是这样的:函数apply($index,$number){$this->result=$number;}
没有要求数学优先级,我对逻辑有了更清晰的了解,但是我如何调用或切换加法、除法、乘法、减法以及如何区分和触发apply单词,你能给我更多的帮助吗