|
楼主 |
发表于 2007-5-24 21:32
|
显示全部楼层
下面是正确的代码,参考答案之一,比较长,中间部分可以不用理会,我不明白的只是它的i不用赋初值,(是不是自动默认为0?这个值得考究..第一次见..当我改为int i=0的时候是正确的,而赋其他值就不能返回任何东西)还有有关将*e赋值给p的语句,就像我前面所说,改为*p++=*e++,也是什么都返回不了....
char *RPExpression(char *e)
/* 返回表达式e的逆波兰式 */
{ int i;
char *p,c;
p=(char*)malloc(strlen(e)*sizeof(char));
Stack s;
InitStack(s);
for(;*e!='\0';e++)
{ if((*e!='+')&&(*e!='-')&&(*e!='*')&&(*e!='/')&&(*e!='(')&&(*e!=')'))
{*(p+i)=*e;
i++;
}
else
{switch(*e)
{case'(':Push(s,*e);break;
case')':while(Top(s)!='(')
{Pop(s,c);
*(p+i)=c;
i++;
}
Pop(s,c);break;
case'+':
case'-':while(!(StackEmpty(s))&&!(Top(s)=='('))
{Pop(s,c);
*(p+i)=c;
i++;
}
Push(s,*e);break;
case'*':
case'/':if((Top(s)=='*'||Top(s)=='/'))
{Pop(s,c);
*(p+i)=c;
i++;
Push(s,*e);
}
else
Push(s,*e);break;
}
}
}
while(!(StackEmpty(s)))
{Pop(s,c);
*(p+i)=c;
i++;
}
*(p+i)='\0';
return p;
} |
|