#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_SIZE 100
int evaluate(char postfix[]);
void parse(char postfix[], int *pos, char buffer[]);
int main()
{
char expression[] = "4 2 / 3 2 + 1 - * 5 2 - +";
printf("answer: %d\n", evaluate(expression));
return 0;
}
int evaluate(char postfix[])
{
int stack[MAX_SIZE];
int top = -1;
char token[MAX_SIZE];
int i = 0;
while(postfix[i]){
parse(postfix, &i, token);
if(isdigit(token[0])){
int value = atoi(token);
stack[++top] = value;
}
else{
int op2 = stack[top--];
int op1 = stack[top--];
switch(token[0]){
case '+':
op1 += op2;
break;
case '-':
op1 -= op2;
break;
case '*':
op1 *= op2;
break;
case '/':
op1 /= op2;
break;
default:
printf("error occured! can't resolve symbol %c\n", token[0]);
exit(1);
}
stack[++top] = op1;
}
}
return stack[0];
}
void parse(char postfix[], int *pos, char buffer[])
{
int i = 0;
while(postfix[*pos] == ' ')
(*pos)++;
if(isdigit(postfix[*pos])){
while(isdigit(postfix[*pos]))
buffer[i++] = postfix[(*pos)++];
buffer[i] = '\0';
}
else
buffer[0] = postfix[(*pos)++];
}