我想将中缀转换为后缀表达式。这是我的代码:
问题是这实际上并没有这样做,我很困惑为什么。一切对我来说都很有意义,但是当我输入例如4*5
作为输出时,我得到了同样的结果。中缀是一个输入,而后缀是我想要作为指向后缀的指针返回的内容,因此可以对其进行评估。
如果操作数是 * - + 或 /,则返回 true
更新:
oki 我得到了它的工作,但我很难弄清楚如果你输入像 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。.