2013-09-28 2 views
2

나는 주어진 문제에 대한 적절한 해결책을 찾고 인터넷을 통해 몇 가지 아이디어를 찾고있다. 어떤 것도 찾을 수 없었습니다.방정식에 누락 된 왼쪽 괄호 추가하기

문제는 표준 입력에서 왼쪽 괄호가없는 표현식을 취해 괄호가 삽입 된 해당 중위식을 인쇄하는 프로그램을 작성하는 것입니다.

표현을 감안할 때 : 1 + 2) * 3 - 4)* 5 - 6)))
출력 : ((1 + 2) * ((3 - 4) * (5 - 6)))

것은 무엇이 문제를 해결하는 가장 좋은 방법이 될 수 있습니까?

+3

'1 + ((2) * 3 - ((4) * 5 - (6)))'이 아니란 것을 어떻게 알 수 있습니까? –

+0

이전의 오른쪽 괄호 다음 피연산자 뒤에 왼쪽 괄호를 넣기 만 원합니까? – jab

+0

@lc, 결과 형식이 대답으로 제시 되었기 때문입니다. –

답변

9

목표는 고독한 숫자가 아닌 표현식을 괄호로 묶는 것이라고 가정합니다.

그래서 당신은 (각 토큰을 잡고 스택에

2 
+ 
1 

잡아입니다 다음 토큰) 이제 스택의 상위 세를 타고 그 괄호 사이를 샌드위치를 ​​던져 할 것 1 + 2), 하나의 표현식으로 스택에 다시 넣습니다.

다음이

4 
- 
3 
* 
(1 + 2) 

상단 세 꺼내서 스택에 다시 넣어 괄호 (3-4) * (1 + 2)

와 같은 스택 보이는 밀어 다시

6 
- 
5 
* 
(3-4) 
* 
(1+2) 

우리는 또 다른 괄호를 쳐서 스택에서 다시 상위 3 개를 괄호로 묶고 뒤로 밉니다.

(5-6) 
* 
(3-4) 
* 
(1+2) 

우리는 ... 다시 스택의 상위 3 개를 잡아, 괄호로 묶다하고 다시

((3-4)*(5-6)) 
* 
(1+2) 

와 밀어 다른 괄호를 잡아

((1 + 2) * ((3 - 4) * (5 - 6))) 

더 이상 입력 때문에,이 우리의 대답은

+0

멋진 방법입니다. 당신은 큰 도움이되었습니다. @agoaj –

+0

@ mehdix_ 환영합니다. 도움이된다면 정답으로 표시하는 것을 잊지 마십시오. – agoaj

+0

마지막 괄호가 균형을 이루지 않아 버그가 있습니다. – TheM00s3