ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터프리터...23
    일지 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

     

    댓글

Designed by Tistory.