Ошибка SIGSEGV в переходе от инфикса к постфиксу с использованием стека

#c 11 #segmentation-fault #stack #postfix-notation #infix-operator

Вопрос:

Когда я попытался сделать условие if в цикл while, чтобы удалить больше, чем один оператор из стека в кронштейн (ф г/ч) здесь выход должен быть (fghбыл/ ), но я не могу запустить код с циклом while мой вывод идет (fghбыл/) благодаря условие if , как я могу поместить цикл while без сигнала SIGSEGV, я получаю ошибку времени выполнения сигнала SIGSEGV ?

 #include<bits/stdc  .h>
using namespace std;

class Solution
{
    public:
    //Function to convert an infix expression to a postfix expression.
    string infixToPostfix(string s)
    {
        // Your code here
        stack<char> op;
        string res;
        int i=0;
        while(i<s.length()){
            if(s[i]>='a' amp;amp; s[i]<='z' || s[i]>='A' amp;amp; s[i]<='Z' ){
                res.push_back(s[i]);
                cout<<res<<" ";
            }
            else if(s[i]=='(')
                op.push(s[i]);
            else if(s[i]==')'){
                if(op.top()!='('){ //here SIGSEGV I want this in while loop not if statement
                    res.push_back(s[i]);
                    op.pop();
                    cout<<res<<" ";
                }
                op.pop();
            }
            else {
                if(op.empty())
                    op.push(s[i]);
                else if(precedence(s[i])>precedence(op.top()))
                    op.push(s[i]);
                else if(precedence(s[i])<precedence(op.top())){
                    while(precedence(s[i])<precedence(op.top())){
                        res.push_back(op.top());
                        op.pop();
                    }
                    op.push(s[i]);
                }
                else{
                    res.push_back(op.top());
                    op.pop();
                    op.push(s[i]);
                }
            }
        i  ;
        }
        return res;
    }
    int precedence(char a)   //precedence function
    {
        if (a == '^')
            return 3;
        else if (a == '*' || a == '/')
            return 2;
        else if (a == ' ' || a == '-')
            return 1;
        else if (a == '(' || a == ')')
            return 0;
    }
    

};

int main(){
    int t;
    t=1;
    cin.ignore(INT_MAX, 'n');
    while(t--){
        string exp;
        cin>>exp;
        Solution ob;
        cout<<ob.infixToPostfix(exp)<<endl;

    }
    return 0;
}
 

Комментарии:

1. res.push_back(s[i]); должно быть res.push_back(op.top()); . С этим исправлением и заменой if на while , как вы себе представляете, пример работает для меня

2. Да , я уже исправил op.top (), спасибо, что теперь он работает, не мог найти, почему он показывал sigsegv, в любом случае спасибо!!!