试设计一个算术四则运算表达式求值的简单计算器。 基本要求: 1、 操作数均为非负整数常数,操作符仅为+、-、*、/、、; 2、 编写 main 函数进行测试
时间: 2023-10-20 21:04:48 浏览: 100
ChitGPT: 好的,我可以帮你设计一个算术四则运算表达式求值的简单计算器。以下是示例代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char ch) {
switch(ch) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '(':
case ')':
return 0;
default:
return -1;
}
}
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;
case '%':
return a % b;
case '^':
return pow(a, b);
default:
return 0;
}
}
int evaluate(string expr) {
stack<int> operands;
stack<char> operators;
for(int i=0; i<expr.length(); i++) {
char ch = expr[i];
if(ch == ' ') {
continue;
}
if(ch >= '0' && ch <= '9') {
int num = 0;
while(i < expr.length() && expr[i] >= '0' && expr[i] <= '9') {
num = num * 10 + (expr[i] - '0');
i++;
}
operands.push(num);
i--;
} else if(ch == '(') {
operators.push(ch);
} else if(ch == ')') {
while(!operators.empty() && operators.top() != '(') {
int b = operands.top(); operands.pop();
int a = operands.top(); operands.pop();
char op = operators.top(); operators.pop();
int result = calculate(a, b, op);
operands.push(result);
}
operators.pop();
} else {
while(!operators.empty() && precedence(operators.top()) >= precedence(ch)) {
int b = operands.top(); operands.pop();
int a = operands.top(); operands.pop();
char op = operators.top(); operators.pop();
int result = calculate(a, b, op);
operands.push(result);
}
operators.push(ch);
}
}
while(!operators.empty()) {
int b = operands.top(); operands.pop();
int a = operands.top(); operands.pop();
char op = operators.top(); operators.pop();
int result = calculate(a, b, op);
operands.push(result);
}
return operands.top();
}
int main() {
string expr;
getline(cin, expr);
int result = evaluate(expr);
cout << "结果为:" << result << endl;
return 0;
}
```
你可以像这样调用 evaluate 函数来求得一个算术表达式的值,然后将结果输出即可。
注意,这里的实现并没有考虑负数和带小数的情况,如果要考虑这些情况,需要相应地修改代码。
阅读全文