[英]infix to postfix converter using stack
我想将中缀转换为后缀表达式。 这是我的代码:
问题是实际上并没有这样做,我很困惑为什么。 一切对我来说都很有意义,但是当我输入例如4*5
作为输出时,我得到的是相同的东西。 infix是输入,而postfix是我想作为指向postfix的指针返回的内容,因此可以对其进行评估。
如果它是*-+或/,则操作数返回true
更新:
好吧,我让它工作了,但是我很难弄清楚如果您输入像5 * 3 + -1.2这样的话,那么如果您想拥有负数,它就无法工作。
void infix2postfix(char* infix, char* postfix){
char *in,*post;
Stack<char>Q;
char n;
in = &infix[0];
post = &postfix[0];
while(*in){
while(*in == ' ' || *in == '\t'){
in++;
}
if( isdigit(*in) || isalpha(*in) ){
while( isdigit(*in) || isalpha(*in)){
*post = *in;
post++;
in++;
}
}
if( *in == '(' ){
Q.Push(*in);
in++;
}
if( *in == ')'){
n = Q.Pop();
while( n != '(' ){
*post = n;
post++;
n = Q.Pop();
}
in++;
}
if( operand(*in) ){
if(Q.IsEmpty())
Q.Push(*in);
else{
n = Q.Pop();
while(priority(n) >= priority(*in)){
*post = n;
post++;
n = Q.Pop();
}
Q.Push(n);
Q.Push(*in);
}
in++;
}
}
while(!Q.IsEmpty())
{
n = Q.Pop();
*post = n;
post++;
}
*post = '\0';
}
这是我的代码新代码,它可以工作,但是我希望它与一元运算符一起工作,因此它将使用输入4 * 5 + 4 + -1.2
,因此在之间有一个空格,如果没有,则例如-1.2负数。 我的代码也不适用于大于9的整数,如果我输入10,则它只能乘以1 * 0。 。
如果可以使用两个堆栈,则可以将一个用作值,将一个用于运算符。
从输入中提取值时,将其推入值堆栈中,如果发现运算符,则将其推入运算符堆栈中。
然后在创建输出时,从运算符堆栈中弹出一个运算符,从值堆栈中弹出一两个值(取决于运算符)。 输出值,输出运算符。 对于使用多个运算符的表达式,上一个操作被认为是第一个值,因此下次只需要弹出一个(或零个)值即可。
当然,这是一种幼稚的方式,不会处理诸如运算符优先级之类的事情。
您还可以做一个递归下降解析器,尽管它实际上并不使用显式堆栈,但它使用隐式堆栈,因为隐式堆栈是递归调用的函数,因此该堆栈实际上是函数调用堆栈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.