C ++ Операторы алгоритма Маневрового двора неуместны

Я несколько изменил этот алгоритм, чтобы позаботиться о скобках и скобках

queue<string> postEvaluation(vector<string> expression){
stack<string> operators;
queue<string> output;

for(int i = 0; i < expression.size(); i++){
if(isdigit(expression[i]))
output.push(expression[i]);
if(expression[i] == "");
if (IsOperator(expression[i])) {
/* Next, move all operators off the stack until this operator has the
* highest precedence of them all.
*/
while (!operators.empty() && IsOperator(operators.top()) &&
Precedence(operators.top()) >= Precedence(expression[i])) {
output.push(operators.top()); operators.pop();
}

/* Add the operator to the operator stack. */
operators.push(expression[i]);

}

/* Case 2: Found an open parenthesis. */
else if (expression[i] == "(" || expression[i] == "[" || expression[i] == "{" ) {
operators.push(expression[i]);
}
/* Case 3: Found a close parenthesis. */
else if (expression[i] == ")" || expression[i] == "]" || expression[i] == "}") {

/* Keep moving tokens over from the operator stack to the result until
* we find a matching open parenthesis.  If we run out of tokens, then
* there must be a syntax error.
*/
while (!operators.empty() && operators.top() != "(" && !operators.empty() && operators.top() != "[" && !operators.empty() && operators.top() != "{") {
output.push(operators.top()); operators.pop();
}

/* Remove the parenthesis we matched. */
operators.pop();
}

}

/* Keep shifting all the operators back off the operator stack onto the end
* of the input.  If we find an open parenthesis, then the input is
* malformed.
*/
while (!operators.empty()) {
output.push(operators.top()); operators.pop();
}
return output;
}

по какой-то причине, когда я ввожу что-то вроде: 10 — [(3 — 2) * 10] / 5
выход: 10 3 2 — 10 * — 5 /

когда выход должен быть: 10 3 2 — 10 * 5 / —

Любые идеи о том, как правильно изменить это, чтобы обрабатывать скобки {} и скобки []?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]