中置式を後置式に変換したい。これは私のコードです:
問題は、これが実際にはそうしないことであり、私はその理由を混乱させています。すべてが私には理にかなっていますが、たとえば4*5
出力として入力すると、同じことが得られます。infix は入力で、postfix は postfix へのポインターとして返したいもので、評価できるようにします。
* - + または / の場合、オペランドは 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';
}
これが私のコードの新しいコードです。動作しますが、単項演算子で動作するようにしたいので、 input を取る4 * 5 + 4 + -1.2
ので、間にスペースがあり、そうでない場合は、たとえば -1.2 負の数です。また、私のコードは 9 を超える整数に対しては機能しません。10 を入力すると、1*0 が乗算されます。.