띄어쓰기 없이 주어지는 infix를 postfix로 변환
글쓴이: canuyes / 작성시간: 월, 2013/04/29 - 5:56오후
안녕하세요.
현재 알고리즘 복습중인 학생입니다.
예전에 알고리즘을 짤 때는 아무 이상함을 못느끼고 그냥 넘어 갔었는데 오늘 다시보니 제가 큰걸 지나쳤던것 같습니다.
저는 띄어쓰기 없이 주어지는 중위표기식을 후위표기식으로 변환하는 것을 공부하고 있습니다.
변환 자체는 문제가 아니지만 주어진 중위표기식을 알맞은 토큰으로 자르는 것이 어렵네요...
저는 연산자가 나오면 연산자의 앞뒤로 공백을 삽입하여 나중에 strtok함수로 토크나이징 할 생각이었습니다.
input : 1+2+3 / output : 1 + 2 + 3
요렇게요.
그런데, 이방법으로 적용해보니 음수 인풋에 대해서는 적절한 대응을 할 수 없었습니다.
가령 input : 87*-12 / output : 87 * - 12
요렇게 되어 음수에 대한 정보가 소멸되어 버리고 맙니다.
결국 핵심은 수식에 사용되는 '-'가 단항연산자인지, 이항 연산자인지를 알아내는 것 인듯 싶습니다.
참고할만한 방법이나, 힌트를 주시면 감사하겠습니다.
Forums:
이건 그냥 꽁수'입니다.
-를 _로 바꾸면 편합니다.
- (마이너스)를 _ (언더바)로 바꾸면. 쉽게 확인 가능합니다.
직접 구현하려니까. 생각보다 어렵네요... ㅇ_ㅇ;;
http://www.winapi.co.kr/clec/cpp2/19-3-2.htm 이거도 참고해보세요.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
연산자가 2회 연속으로 나타날때 두번째 연산자가 +
연산자가 2회 연속으로 나타날때
두번째 연산자가 + 거나 - 라면
그것은 단항 연산자라고 판단한다...
...헛점이 있을까요?
gilgil.net
strtok 함수를 사용하는 것은 한계가 있습니다.
1. regular expression을 이용하여 각각의 token을 추출한다.
2. BNF를 이용하여 제대로 구현한다.
http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form
www.gilgil.net
댓글 달기