在c ++中使用postix转换

时间:2017-11-07 18:39:56

标签: c++ c++11

所以这里我有一个代码用于中缀转换后缀。我们的想法是发送一个包含中缀公式的字符串,并返回该公式的后缀表示法。如果操作为+ - * / () [] {}tezinaOperacije(),则操作符为+,函数-返回1;如果操作为*/,则返回2。否则它返回-1。当您在打开的括号上调用它时,函数zatvorenaZagrada()将返回右侧的闭括号。问题是函数返回一个空字符串。有人可以帮忙吗?

string infixToPostfix(string& str){
        stack<char> stek;
        string s="";
        for(int i=0; i<str.size(); i++){
            s+=s[i];
        }
        char pre='(';
        string copy="";
        for(int i=0; i<s.size(); i++){
            if(s[i]>='0' && s[i]<='9'){
                if(pre==')' || prei==']' || pre=='}' || pre=='0') throw "wrong";
                char number=s[i];
                copy+=number;
                pre=='0';
            }
            else if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
                        if(pre=='0' || pre==')') throw "Wrong";
                        char sign=s[i];
                        stek.push(sign);
                        pre=sign;
                    }
            else if(s[i]==')' || s[i]==']' || s[i]=='}'){
                char sign=s[i];
                while(!stek.empty() && tezinaOperacije(stek.top())>0){
                    copy+=stek.top();
                    stek.pop();
                }
                if(stek.empty() || sign !=ZatvorenaZagrada(stek.top())) throw "wrong declaration";
                stek.pop();
                pre=sign;
            }
            else if(tezinaOperacije(s[i])>0){
                char sign=s[i];
                if(tezinaOperacije(pre)>0 || pre=='(' || pre=='[' || pre=='{') throw "wrong";
                while(!stek.empty() && tezinaOperacije(stek.top())>=tezinaOperacije(sign)){
                    copy+=stek.top();
                    stek.pop();
                }
                stek.push(sign);
                pre=sign;
            }
        }
        while(!stek.empty()){
            copy+=stek.top();
            stek.pop();
        }
        return copy;
    }

1 个答案:

答案 0 :(得分:0)

    string s="";
    for(int i=0; i<str.size(); i++){
        s+=s[i];
//---------^  s?
    }

您获得s满零('\0'

我想你的意图是

    string s="";
    for(int i=0; i<str.size(); i++){
        s+=str[i];
//---------^^^
    }

s满零,以下for

    for(int i=0; i<s.size(); i++){
        if(s[i]>='0' && s[i]<='9'){
          // ...
        }
        else if(s[i]=='(' || s[i]=='[' || s[i]=='{'){
          // ...
        }
        else if(s[i]==')' || s[i]==']' || s[i]=='}'){
          // ...
        }
        else if(tezinaOperacije(s[i])>0){
          // ...
        }
    }

没有任何用处,copy仍为空。