인터뷰 포럼에서이를 발견했으며 흥미로운 질문이라고 생각했습니다. C++에서이 작업을 수행하는 간단한 방법이 있습니까? 예를 들어 다음과 같은 함수 선언이 있다고 가정합니다.(0 & (1 | 0) | 1) & (0 | 1)과 같은 문자열을 해당 진리 값으로 변환합니다.
bool _transform(string x);
/* x is a combination of (,), 0, 1, &, and | such that all expressions
start with a open and ending brace, and the function evaluates the
strings actual truth value
*/
이 작업을 수행하는 데 효율적이고 비교적 간단한 방법이 있습니까? 재귀 적으로 괄호를 닫는 방법을 생각했지만 문제는 어려워 보입니다.
문자열이 유효한 표현이라고 가정 할 수 있습니까? 꽤 구현을 바꿀 것이라고 확신합니다. – Matthew
@Human 명확히하지 못해 죄송합니다. 예, 문자열은 항상 유효하며 오류 검사는 (아마도) 필요하지 않습니다. 간단하게하기 위해 나는 표현이 항상 정확한 형태라고 말할 것이다. – user3340001
이것은 산술 연산 대신 논리 연산을 사용하여 표현 구문 분석 및 평가에서 다소 단순한 연습입니다. 사소한 것. '재귀 적 하강 표현 구문 분석'또는 Dijkstra Shunting-yard 알고리즘을 찾으십시오. @Human 이러한 알고리즘은 잘못된 입력을 감지 할 수 있습니다. 아무런 차이가 없습니다. – EJP