일지
인터프리터...23
niamdank
2020. 12. 7. 12:01
역 폴란드 표기법 프로그램
역 폴란드 표기법 처리 함수 작성
ReversePolish.h
#pragma region 역 폴란드 표기법
char polish_result[80];
void Polish(char* str)
{
int temp;
char* result = polish_result;
top = 0;
while (true)
{
while (isspace(*str))
{
str++;
}
// 행의 마지막인 경우
if (*str == '\0')
{
while (top > 0)
{
*result = Pop();
if (*result == '(')
{
std::cout << "괄호 '('의 쌍이 올바르지 않습니다.\n";
exit(1);
}
result++;
}
break;
}
// 문자나 숫자인 경우
if (islower(*str) || isdigit(*str))
{
*result++ = *str++;
continue;
}
switch (*str)
{
case '(':
Push(*str);
break;
case ')':
while (true)
{
temp = Pop();
if (temp != '(')
{
*result++ = temp;
if (top == 0)
{
std::cout << "괄호 '('의 쌍이 올바르지 않습니다.\n";
exit(1);
}
}
else
{
break;
}
}
break;
default:
if (Order(*str) == -1)
{
std::cout << "우선순위가 결정되지 않은 문자입니다.\n";
exit(1);
}
while (top > 0 && Order(Peek()) >= Order(*str))
{
*result++ = Pop();
}
Push(*str);
break;
}
str++;
}
*result = '\0';
}
#pragma endregion
더보기