Я делаю функцию для преобразования математической строки инфикса в постфикс. Вот что у меня есть:
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 +
Что я делаю не так? Я думаю, что нужно различать минус как в операторе, так и минус, как при создании значения отрицательным.