求学长学姐解答,这一部分我没有学明白,请问如果求得下面公式的计算过程?
以下是一个使用STL编写公式的示例代码:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
string formula = "2*(3+4)/5-6";
stack<char> operators;
stack<double> operands;
for (char c : formula) {
if (isdigit(c)) {
operands.push(c - '0');
} else if (c == '(') {
operators.push(c);
} else if (c == ')') {
while (operators.top() != '(') {
char op = operators.top();
operators.pop();
double b = operands.top();
operands.pop();
double a = operands.top();
operands.pop();
if (op == '+') {
operands.push(a + b);
} else if (op == '-') {
operands.push(a - b);
} else if (op == '*') {
operands.push(a * b);
} else if (op == '/') {
operands.push(a / b);
}
}
operators.pop();
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
while (!operators.empty() && operators.top() != '(' && ((c == '+' || c == '-') ? 1 : 2) <= ((operators.top() == '+' || operators.top() == '-') ? 1 : 2)) {
char op = operators.top();
operators.pop();
double b = operands.top();
operands.pop();
double a = operands.top();
operands.pop();
if (op == '+') {
operands.push(a + b);
} else if (op == '-') {
operands.push(a - b);
} else if (op == '*') {
operands.push(a * b);
} else if (op == '/') {
operands.push(a / b);
}
}
operators.push(c);
}
}
while (!operators.empty()) {
char op = operators.top();
operators.pop();
double b = operands.top();
operands.pop();
double a = operands.top();
operands.pop();
if (op == '+') {
operands.push(a + b);
} else if (op == '-') {
operands.push(a - b);
} else if (op == '*') {
operands.push(a * b);
} else if (op == '/') {
operands.push(a / b);
}
}
cout << formula << " = " << operands.top() << endl;
return 0;
}
```