如何用C++代码实现表达式求值
时间: 2023-09-14 16:12:13 浏览: 50
在C++中,可以使用栈(Stack)数据结构来实现表达式求值。具体步骤如下:
1. 定义一个栈来存储操作数和操作符。
2. 遍历表达式中的每个字符,如果是数字,则入栈;如果是操作符,则将栈顶的两个操作数出栈,进行运算,将结果入栈。
3. 最后,栈中只剩下一个元素,即为表达式的值。
下面是一个简单的实现示例(假设表达式中只包含 +、-、*、/ 四种运算符和整数操作数):
```c++
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
// 判断一个字符是否为操作符
bool isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
// 计算两个操作数的值
int calculate(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
// 计算表达式的值
int evaluateExpression(char* expr) {
stack<int> s;
int len = strlen(expr);
for (int i = 0; i < len; i++) {
if (isdigit(expr[i])) {
// 如果是数字,则将数字字符串转换为整数并入栈
int num = 0, j = i;
while (j < len && isdigit(expr[j])) {
num = num * 10 + (expr[j] - '0');
j++;
}
s.push(num);
i = j - 1;
} else if (isOperator(expr[i])) {
// 如果是操作符,则将栈顶的两个操作数出栈,进行运算,将结果入栈
int b = s.top();
s.pop();
int a = s.top();
s.pop();
int result = calculate(a, b, expr[i]);
s.push(result);
}
}
// 最后,栈中只剩下一个元素,即为表达式的值
return s.top();
}
int main() {
char expr[] = "3+4*5-2";
int result = evaluateExpression(expr);
cout << "表达式的值为:" << result << endl;
return 0;
}
```
运行结果为:
```
表达式的值为:17
```
需要注意的是,上述实现只支持整数操作数和四种基本运算符,如果想要支持更多类型的操作数和运算符,需要对代码进行相应的修改和扩展。