2012-03-07 6 views
1

그래서 저는 C++로 cmd 기반 계산기를 프로그래밍하고 있습니다. 나는 그것을 끝냈다.하지만 접미어를 접미사로 변환 한 후에 나는 올바른 순서로 연산자/피연산자가 들어있는 접미사 큐라는 큐를 가지고있다. 후위 표현식을 중위어로 다시 변환하려면 어떻게해야합니까?C++ 접미사를 중위어로 변환

+4

두 표현 사이에 양면 매핑이 없으므로 "뒤"를 중위로 변환 할 수 없습니다. 즉, 여러 삽입 표현식이 동일한 접미사 표현식을 산출 할 수 있으며 원래 표현식이 무엇인지 말할 방법이 없습니다. 당신이 할 수있는 것은 "어떤"중위 표현으로 변환하는 것입니다. –

답변

1

여분의 괄호를 만드는 데 신경 쓸 필요가 없다면 꽤 쉽습니다. 당신은 기본적으로 후위 데이타를 평소와 같이 "평가"합니다. 단, 연산자에 도달했을 때 그 연산자를 평가하고 결과를 스택에 푸시하는 대신 열린 괄호, 첫 번째 피연산자, 연산자, 두 번째 피연산자, 마지막으로 클로즈 - paren.

주문을 변경하는 데 신경 쓰지 않는다면 관계없는 괄호를 피할 수 있습니다. 표현식을 뒤로 이동하여 operator operand operand에서 operand operator operand으로 다시 정렬하십시오. 피연산자가 필요한 연산자를 발견하면 유사하게 인쇄 할 하위 표현식이 생깁니다. 연산자가 이전에 발생한 연산자보다 우선 순위가 낮은 경우에만 하위 식을 괄호로 묶어야합니다.

예를 들어, 다음을 고려하십시오. a b + c *. 이것을 뒤로 걸어 가면 *이되고 c이 나오므로 c *을 출력합니다. 그런 다음 다른 피연산자가 필요하지만 +이므로 하위식이 있습니다. +*보다 낮은 우선 순위이므로 하위 식을 괄호로 묶어야하므로 c * (b + a)이됩니다. 우리가 있던 경우에

반대로 : a b * c +, 우리는 c +을 생산, 유사하게 시작 했죠,하지만 * 이후 괄호없이 +, 우리는 /를 a * b (또는 b * a)를 인쇄 할 수 수 높은 우선 순위입니다.

- 또는 / (또는 교환 가능하지 않은 것)을 사용하면 피연산자의 순서가 정확하도록주의해야합니다. 그렇다고하더라도 원래 표현식을 다시 얻지는 않을 것입니다. 논리적으로 그 표현식과 동일한 표현식을 사용해야합니다.