使用c++设计一个简单的计算器,它支持不带括号的四则运算,计算器要满足先乘除后加减的规则
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
// 定义运算符的优先级
int precedence(char op) {
if (op == '*' || op == '/')
return 2;
if (op == '+' || op == '-')
return 1;
return 0;
}
// 执行基本的算术运算
double applyOp(double a, double b, char op) {
switch(op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
return 0;
}
// 主要的计算函数
double calculate(std::string expression) {
std::vector<double> values;
std::vector<char> ops;
std::stringstream ss(expression);
std::string token;
while (ss >> token) {
if (token == "+" || token == "-" || token == "*" || token == "/") {
// 处理运算符
while (!ops.empty() && precedence(ops.back()) >= precedence(token[0])) {
double b = values.back(); values.pop_back();
double a = values.back(); values.pop_back();
char op = ops.back(); ops.pop_back();
values.push_back(applyOp(a, b, op));
}
ops.push_back(token[0]);
} else {
// 处理数字
values.push_back(std::stod(token));
}
}
// 处理剩余的运算
while (!ops.empty()) {
double b = values.back(); values.pop_back();
double a = values.back(); values.pop_back();
char op = ops.back(); ops.pop_back();
values.push_back(applyOp(a, b, o