확인 단항 연산자를 돌봐 너 한테 rithm를 접미사에 있습니다.중위는
입력이 이미 토큰 스트림으로 형식화되었으므로 토큰에 연산자 또는 피연산자 정보가 포함됩니다. 알고리즘은이를 받아 들여 평가할 수있는 후위 표현식을 제공해야합니다. 나는 표준 변환 너 한테을 사용하는 경우
, 나는 단항 및 이진 연산 구별하지 못할. a * (- b)가 나에게 ab- *를주는 것은 잘못된 방식으로 평가됩니다.
확인 단항 연산자를 돌봐 너 한테 rithm를 접미사에 있습니다.중위는
입력이 이미 토큰 스트림으로 형식화되었으므로 토큰에 연산자 또는 피연산자 정보가 포함됩니다. 알고리즘은이를 받아 들여 평가할 수있는 후위 표현식을 제공해야합니다. 나는 표준 변환 너 한테을 사용하는 경우
, 나는 단항 및 이진 연산 구별하지 못할. a * (- b)가 나에게 ab- *를주는 것은 잘못된 방식으로 평가됩니다.
는 또는 다른 운영자가, 또는이 왼쪽 괄호 다음에 오는 후, 다음은 단항 연산자입니다 온다.
출력 문자열에서 단항 연산자에 다른 기호를 사용해야합니다. 그렇지 않으면 접미사 표기법에서 이진 형식과 단항 형식을 구별 할 수 없기 때문입니다.
몇 개의 연속적인 연산자가 있다면? 그 규칙은 여전히 적용됩니까? 예 : '5 + -2'는 괜찮지 만'5 + - + - 2'는 어떨까요? – hfossli
@htossli 네, 대단히예요. –
두 개의 연속적인 연산자를 사용하면 두 번째 연산자는 단항이됩니다. 연속적인 연산자가 더 많은 경우 첫 번째를 제외한 모든 연산자는 단항 연산자가됩니다.
는 피연산자-1
조작자
*
에서 모든 단항
-
변환하고, 제 1 요소는 운영자 경우 모든 단항
+
제거 그것은 단항 연산자이다.
괄호는 특별한 경우이지만 무시할 수있는 첫 번째 단계는 할 수 있습니다. 다음 예에서 -
은 *
과 연속됩니다.
4*(-(5))
및 토큰
가 될 것입니다 :4
*
(
-1
*
(
5
)
)
결국 다른 답을 선호했는데 실제로 단항 연산자의 출력에 특수 기호가 필요했습니다.결국 그것은 변환 된 문자열을'a * (-b)'로 어떻게 보았을까요? C 표기법에 충실 했습니까? 아니면 * 기호가 내포되어있는 4 (5-2)와 같은 것을 받아들이셨습니까? – Antonio
잘 다음과 같은 멤버들로 클래스를 정의했습니다 : int opcode, string operand. 입력 문자열을 먼저이 클래스의 배열로 변환 했으므로 스캔하는 동안 단항 또는 2 진 op인지 확인하고 그에 따라 opcode를 할당했습니다. 그렇다면 이것을 후위로 변환하고 단항 연산자를 처리 한 if-else conditiosn을 평가하는 동안 (나는 특정 연산자 집합을 할당 한 이후 단항 적이라는 것을 이미 알고 있습니다) – Aditya
읽으 shunting yards algorithm에 대해. 운영자가 표현식에서 우선 인 경우
단항 연산자를 완전히 제거하기 위해 -6
을 06-
으로 간단하게 변환 할 수 있습니다. 저는이 방법이 더 직각적이고 처리 할 때 특별한 경우를 돌볼 필요가 없기 때문에이 방법을 좋아합니다.
대체 접근법은 동일한 기호를 사용하여 연산자의 단항 및 이진 버전에 다른 기호를 사용하는 것입니다 (예 : -
은 이진 마이너스로 유지되고 ~
은 부정 부호가됩니다.
질문은 어디에 있습니까? – kotlomoy
기호에 대한 출력에서 다른 기호 (예 : '_')를 단항 연산자 '-'로 사용합니다. – BLUEPIXY
질문 : 표준 문제 또는 내 문제를 정렬하는 새로운 문제의 수정을 제안합니다. – Aditya