complete code in cpp
user_9809957
c_cpp
2 years ago
1.8 kB
10
Indexable
#include <cstddef>
#include <iostream>
#include <stack>
#include <string>
int operate(int a, int b, char op) {
if (op == '+') return a + b;
if (op == '-') return a - b;
return 0;
}
void compute(std::stack<int>& values, std::stack<char>& operators) {
int b = values.top(); values.pop();
int a = values.top(); values.pop();
char op = operators.top(); operators.pop();
values.push(operate(a, b, op));
}
int process_exp(const std::string& expr) {
std::stack<int> values;
std::stack<char> operators;
size_t i = 0;
while (i < expr.size()) {
if (expr[i] == ' ') {
i++;
continue;
}
if (isdigit(expr[i])) {
int val = 0;
while (i < expr.size() && isdigit(expr[i])) {
val = val * 10 + (expr[i] - '0');
i++;
}
values.push(val);
} else if (expr[i] == '+' || expr[i] == '-') {
while (!operators.empty() && (operators.top() == '+' || operators.top() == '-')) {
compute(values, operators);
}
operators.push(expr[i]);
i++;
} else if (expr[i] == '(') {
operators.push(expr[i]);
i++;
} else if (expr[i] == ')') {
while (operators.top() != '(') {
compute(values, operators);
}
operators.pop(); // Pop the '('
i++;
}
}
while (!operators.empty()) {
compute(values, operators);
}
return values.top();
}
int main() {
std::cout << process_exp("1+20") << std::endl; // 21
std::cout << process_exp("10-2+40") << std::endl; // 48
std::cout << process_exp("10-(1-9)") << std::endl; // 18
return 0;
}
Editor is loading...