От инфикса к постфиксу — включая отрицательные значения

Я делаю функцию для преобразования инфиксной математической строки в постфиксную. Вот что у меня есть:

std::string toPostfix(std::string& infixStr, std::string& postfixStr, std::string& first_nr, std::string& second_nr, char oper, char prev_oper) {

    //std::cout << "[" << infixStr << "]" << std::endl;

    if (infixStr == "") {
        if (second_nr == "") {
            second_nr = "0";
        }

        if (oper == '\0') {
            oper = prev_oper;

            if (prev_oper == '-') {
                second_nr = first_nr;
                first_nr = "0";
            }
        }


        postfixStr += first_nr + " " + second_nr + " " + oper;

        std::cout << " end: " << postfixStr << std::endl ;
        return postfixStr;
    }


    char c = infixStr[0];

    if (isOperator(c)) {
        ///////////////
        if (postfixStr == "") {
            if (c == '-') {

            }
        }
        //////////////////

        if (oper != '\0') {
            if (first_nr == "") {
                if (oper == '-') {
                    /////////////////////////
                }
            }

            postfixStr += first_nr + " " + second_nr + " " + oper + " ";

            first_nr = "";
            second_nr = "";
            oper = '\0';
            prev_oper = c;
        } else {

            oper = c;
        }
    } else {
        if (oper == '\0') {
            first_nr += c;
        } else {
            second_nr += c;
        }
    }

    infixStr = infixStr.erase(0, 1);
    return toPostfix(infixStr, postfixStr, first_nr, second_nr, oper, prev_oper);
}

В некоторых случаях это работает, однако, например, эта входная строка 0+1-5+2 выводит 0 1 + 5 2 +. - игнорируется. Правильный вывод должен быть 0 1 + -5 2 + Что я делаю неправильно? Я думаю, мне нужно различать минус как в операторе и минус как в отрицательном значении.


person O'Niel    schedule 05.04.2020    source источник
comment
Я предлагаю вам прочитать это и переосмыслить весь код вы разместили. Это не тот способ, которым вы должны преобразовывать инфикс в постфикс. Попытка исправить что-то здесь и там, а затем где-то еще возникает утечка — это путь, по которому вы идете с написанным вами кодом.   -  person PaulMcKenzie    schedule 05.04.2020