#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
void infixToPostfix(char infix[]);
void parse(char infix[], int *pos, char buffer[]);
int isp(char symbol);
int icp(char symbol);
int main()
{
char expression[] = "4 / 2 * (3+2-1) + (5-2)";
infixToPostfix(expression);
return 0;
}
void infixToPostfix(char infix[])
{
char token[20];
char stack[MAX_SIZE];
int top = -1;
int i = 0;
while(infix[i] != '\0'){
parse(infix, &i, token);
if(isdigit(token[0]))
printf("%s", token);
else{
if(token[0] == ')'){
while(stack[top] != '(')
printf("%c", stack[top--]);
top--;
}
else{
while(top >= 0 && isp(stack[top]) >= icp(token[0]))
printf("%c", stack[top--]);
stack[++top] = token[0];
}
}
}
while(top >= 0)
printf("%c", stack[top--]);
printf("\n");
}
void parse(char infix[], int *pos, char buffer[])
{
int i = 0;
while(infix[*pos] == ' ')
(*pos)++;
if(isdigit(infix[*pos])){
while(isdigit(infix[*pos]))
buffer[i++] = infix[(*pos)++];
buffer[i] = '\0';
}
else
buffer[0] = infix[(*pos)++];
}
int isp(char symbol)
{
switch(symbol){
case '(':
return 1;
case '+':
case '-':
return 2;
case '*':
case '/':
return 3;
default:
printf("error occured! Unexpected symbol.\n");
exit(1);
}
}
int icp(char symbol)
{
switch(symbol){
case '(':
return 10;
case '+':
case '-':
return 2;
case '*':
case '/':
return 3;
default:
printf("error occured! Unexpected symbol.\n");
exit(1);
}
}