[英]Find answer to string equation without using eval()
我需要一種方法來將一個方程式作為一個字符串給出並找到它的數學答案,最大的警告是我不能使用eval()。
我知道方程只會包含數字,四個數學運算符(即* / + - )和括號,它可能在字符串中有空格,也可能沒有空格。 這里有幾個例子。
4 * 4
4+6/3
(3 / 2)*(4+8)
(4+8) * 2
我猜這是必須要用某種正則表達式完成的?
以防任何人對此感興趣的是我在PHP中提出的用於生成反向波蘭表示法的算法
function convertToRPN($equation)
{
$equation = str_replace(' ', '', $equation);
$tokens = token_get_all('<?php ' . $equation);
$operators = array('*' => 1, '/' => 1, '+' => 2, '-' => 2);
$rpn = '';
$stack = array();
$size = count($tokens);
for($i = 1; $i < $size; $i++) {
if(is_array($tokens[$i])) {
$rpn .= $tokens[$i][1] . ' ';
} else {
if(empty($stack) || $tokens[$i] == '(') {
$stack[] = $tokens[$i];
} else {
if($tokens[$i] == ')') {
while(end($stack) != '(') {
$rpn .= array_pop($stack);
}
array_pop($stack);
} else {
while(!empty($stack) && end($stack) != '(' && $operators[$tokens[$i]] >= $operators[end($stack)]) {
$rpn .= array_pop($stack);
}
$stack[] = $tokens[$i];
}
}
}
}
while(!empty($stack)) {
$rpn .= array_pop($stack);
}
return $rpn;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.