void InFixToPostFix(char* aSource)
{
if (!aSource)
{
return;
}
int len = (int)strlen(aSource);
char *a = aSource;//"1+2*3+(4*5+6)*7";
STACKOpinit(len);
for (int i = 0;i < len;++i)
{
if (a[i] == '(')
{
STACKOppush(a[i]);
}
if (a[i] == ')')
{
char operator = STACKOppop();
while (operator != '(')
{
printf("%c",operator);
operator = STACKOppop();
}
continue;
}
else if (a[i] == '+'||a[i]=='*')
{
Grade grade = None;
if (a[i] == '+')
{
grade = AddAndMinus;
}
else if (a[i] == '*')
{
grade = MulitAndDiv;
}
Grade gradeStack = None;
Operator operator;
do {
operator = STACKOpView();
if ((operator == '\0')||(operator == '('))
{
gradeStack = None;
}
if (operator == '+')
{
gradeStack = AddAndMinus;
}
else if (operator == '*')
{
gradeStack = MulitAndDiv;
}
if (grade <= gradeStack)
{
printf("%c",STACKOppop());
}
} while ((grade <= gradeStack)&&(gradeStack != None));
STACKOppush(a[i]);
}
if ((a[i] >= '0')&&(a[i] <= '9'))
{
printf("%c",a[i]);
}
}
printf("%c",STACKOppop());
printf("%c",STACKOppop());
}