中缀表达式——〉后缀表达式
void infixtosuffix(char *infix,char *suffix)
{
int state=0;//if 进入的为数字,iorc=1;为字符,iorc=0
int i=0,j=0;//i记录infix,j记录suffix
PSeqStack pastack;//,pistack;
pastack=createEmptyStack_seq(20);
//pistack=createEmptyStack_seq(20);
char c,c1;
for(i=0;infix[i]!='\0';++i)
{
c=infix[i];
switch(c)
{
case'0':case'1':case'2':case'3':case'4':
case'5':case'6':case'7':case'8':case'9':
state=1;
suffix[j++]=c;//遇到数字就输出
break;
case'(':
if(state)suffix[j++]=' ';//遇到数字在数字后输出一个空格
state=0;
push_seq(pastack,c);//遇到左括号入栈
break;
case')':
if(state)suffix[j++]=' ';//遇到数字在数字后输出一个空格
state=0;
while(!isEmptyStack_seq(pastack))
{
c1=top_seq(pastack);
pop_seq(pastack);
if(c1=='(')
{
break;
}
suffix[j++]=c1;
}
break;//每读到右括号,将栈类元素弹出,直至遇到左括号,但不弹出左括号
case'+':case'-':
if(state)suffix[j++]=' ';//遇到数字在数字后输出一个空格
state=0;
if(!isEmptyStack_seq(pastack))//栈不空时作比较
{
c1=top_seq(pastack);
if(c1=='+'||c1=='-'||c1=='*'||c1=='/')
{
suffix[j++]=c1;
pop_seq(pastack);
}//运算符为+-*/时取栈顶,表明所遇操作符比前一操作符运算级低
}
push_seq(pastack,c);//运算符入栈
break;
case'*':case'/':
if(state)suffix[j++]=' ';//遇到数字在数字后输出一个空格
state=0;
if(!isEmptyStack_seq(pastack))//栈不空时作比较
{
c1=top_seq(pastack);
if(c1=='*'||c1=='/')
{
suffix[j++]=c1;
pop_seq(pastack);
}//运算符为*/时取栈顶,表明所遇操作符比前一操作符运算级低
}
push_seq(pastack,c);//运算符入栈
break;
}
}
if(state) suffix[j++]=' ';//前一个是数字的话在后面加一个空格
while(!isEmptyStack_seq(pastack))//把剩余的运算符补上
{
c1=top_seq(pastack);
pop_seq(pastack);
suffix[j++]=c1;
}
free(pastack);
suffix[j++]='\0';
}
这个函数用switch是能做成的,但是怎么改if else啊,我不太会,改过去就不对了