题解 | #计算表达式#
计算表达式
https://www.nowcoder.com/practice/7b18aa6b7cc14f8eaae6b8acdebf890b
#include <iostream> #include <stack> #include <map> using namespace std; typedef pair<int, char> pai; map<char, int> m; //记录优先级 int main() { string str; m['+'] = 1, m['-'] = 1, m['*'] = 2, m['/'] = 2; while (cin >> str) { stack<pai> s;//存储运算符 stack<double> num;//存储运算数 for (int i = 0; i < str.size(); i++) { if (isdigit(str[i])) { int j = i; while (j < str.size() && isdigit(str[j])) j++; //i~j-1是一个数 double k = 0; for (int t = i; t < j; t++) k = 10 * k + (str[t] - '0'); num.push(k); i=j-1; } else { while (!s.empty() && s.top().first >= m[str[i]]) { char op = s.top().second; s.pop(); double y = num.top(); num.pop(); double x = num.top(); num.pop(); if (op == '+') num.push(x + y); else if (op == '-') num.push(x - y); else if (op == '*') num.push(x * y); else num.push(x / y); } s.push({m[str[i]], str[i]}); } } while (!s.empty()) { char op = s.top().second; s.pop(); double y = num.top(); num.pop(); double x = num.top(); num.pop(); if (op == '+') num.push(x + y); else if (op == '-') num.push(x - y); else if (op == '*') num.push(x * y); else num.push(x / y); } cout<<num.top()<<endl; } return 0; }