от infix до postfix expressrion не отображаются выходные данные - PullRequest
0 голосов
/ 29 апреля 2018

инфикс к выражению posfix, где a + b конвертируется в ab +.

Я часами смотрел на код и удивлялся, почему вообще ничего не отображается. Я попытался просмотреть его по очереди, насколько мог, и до сих пор не мог понять, почему. Может кто-нибудь указать, где я не прав или это мой код не имеет никакого смысла вообще. Кроме того, мне разрешено использовать только массив и строку.

#include<iostream>
using namespace std;

string stack; //initialize stack to contain operators
int top=-1;

void push(char a){  //add/push it to stack
    top++;
    stack[top] = a;
}

char pop(){ //delete/pop the stack
    return stack[top--];
}

int order_operation(char a){ //the precedence priority

    if(a=='+' || a=='-'){
        return 1;
    }
    else if(a=='*' || a=='/'){
        return 2;
    }
    else {
        return 3;
    }
}

int main(){
    string infix,postfix;

    cout<<"infix: ";
    getline(cin,infix);

    for(int x = 0; x<infix.length(); x++){   //scan the infix for operator
        if(infix[x]=='-' || infix[x]=='+' ||infix[x]=='*' || infix[x]=='/'){
            while(!stack.empty() && order_operation(stack[top])>=order_operation(infix[x])){ //if the stack is not empty and check the precedence

                postfix+=stack[top];  //add it to postfix string
                pop();  //pop the stack operator
            }
            push(infix[x]); 
        }
        else{
            postfix+=infix[x]; //add to postfix string if its operand
        }
    }

    while(!stack.empty()){ //if the stack is not empty put it to posfix string
        postfix+=stack[top];
        pop();
    }
    cout<<postfix;
}

1 Ответ

0 голосов
/ 29 апреля 2018
  1. Вам необходимо добавить endl, как указано @ Carcigenicate.

  2. Ваш pop() метод неверен. Он должен выдавать и возвращать фактическое значение в верхней части стека, и он не должен принимать аргумент. В настоящее время вы портите стек каждый раз, когда его извлекаете.

...