c++计算数学表达式代码
时间: 2023-08-06 15:11:23 浏览: 41
以下是一个简单的C++代码,可以计算基本的数学表达式,包括加、减、乘、除、括号等。
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
// 判断运算符优先级
int priority(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else {
return 0;
}
}
// 计算两个数的运算结果
double calculate(double num1, double num2, char op) {
double result;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
break;
}
return result;
}
// 计算表达式的值
double evaluate(string expression) {
stack<double> numStack;
stack<char> opStack;
int len = expression.length();
for (int i = 0; i < len; i++) {
if (expression[i] >= '0' && expression[i] <= '9') { // 如果是数字,将其入栈
double num = 0;
while (i < len && expression[i] >= '0' && expression[i] <= '9') {
num = num * 10 + (expression[i] - '0');
i++;
}
i--;
numStack.push(num);
} else if (expression[i] == '(') { // 如果是左括号,将其入栈
opStack.push(expression[i]);
} else if (expression[i] == ')') { // 如果是右括号,计算括号内的表达式的值
while (!opStack.empty() && opStack.top() != '(') {
double num2 = numStack.top();
numStack.pop();
double num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.pop(); // 弹出左括号
} else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
while (!opStack.empty() && priority(opStack.top()) >= priority(expression[i])) {
double num2 = numStack.top();
numStack.pop();
double num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.push(expression[i]);
}
}
while (!opStack.empty()) {
double num2 = numStack.top();
numStack.pop();
double num1 = numStack.top();
numStack.pop();
char op = opStack.top();
opStack.pop();
double result = calculate(num1, num2, op);
numStack.push(result);
}
return numStack.top();
}
int main() {
string expression;
cout << "请输入表达式:";
cin >> expression;
double result = evaluate(expression);
cout << "表达式的值为:" << result << endl;
return 0;
}
```
该代码使用两个栈,一个存储数字,一个存储运算符。遍历表达式,如果是数字,则将其入数字栈;如果是运算符,则将其与运算符栈顶的元素进行比较,如果其优先级较高,则将其入栈;否则,弹出运算符栈顶的元素,弹出数字栈中的两个元素,计算它们的运算结果,将结果入数字栈。最后,数字栈中剩余的元素即为表达式的值。
注意,该代码只能处理基本的数学表达式,如果表达式中包含函数、变量、复杂的运算符优先级等,需要使用更复杂的算法来计算。