평가 ()를 사용하지 않고 문자열 방정식에 대한 답을 찾으십시오.

StackOverflow https://stackoverflow.com/questions/1804249

  •  05-07-2019
  •  | 
  •  

문제

나는 줄로 주어진 방정식을 취하고 그것이 수학적 대답을 찾는 방법이 필요합니다. 큰 경고는 eval ()를 사용할 수 없다는 것입니다.

방정식에는 숫자, 4 개의 수학 연산자 (예 : * / + -) 및 괄호 안만 포함되며 문자열에 공백이 있거나 없을 수도 있습니다. 다음은 몇 가지 예입니다.

4 * 4
4+6/3
(3 / 2)*(4+8)
(4+8) * 2

나는 그것이 어떤 종류의 성과를 거두어야 할 것 같아요?

도움이 되었습니까?

해결책

수학 표현은 규칙적이지 않습니다. 그것들입니다 상황에 맞지 않습니다.

가장 좋은 방법은 잘 알려진 수학 구문 분석 알고리즘을 사용하여 구문 분석하는 것입니다. 분로 마당 알고리즘. PHP에서 알고리즘을 구현하기 만하면됩니다. 온라인으로 IT의 PHP 구현을 찾을 수도 있습니다.

다른 팁

여기에 관심이있는 사람이있는 경우 리버스 광택 표기법을 생성하기 위해 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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top