假定算数表达式的值均为非负整数常数,不包含变量、小 数和字符常量。 试设计一个算术四则运算表达式求值的简单计算器。 基本要求: 1、 操作数均为非负整数常数,操作符仅为+、-、*、/、(、); 2、 编写 main 函数进行测试
时间: 2023-11-08 09:08:46 浏览: 57
简单的四则运算的计算器
ChitGPT: 您好!我可以帮助您解决这个问题。根据您的要求,您需要一个能够进行算术四则运算表达式求值的简单计算器。您需要的基本要求包括操作数均为非负整数常数,操作符仅为 +、-、*、/、(、),以及编写 main 函数进行测试,对吗?
用户:是的,请帮我完成这个任务。
ChitGPT: 好的,让我们一步步构建这个计算器。首先,我们需要输入算术表达式,然后对表达式进行判断和计算。我将建议您使用栈来实现这个计算器。
以下是C++实现:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int evaluateExpression(string expression)
{
stack<int> operandStack;
stack<char> operatorStack;
for (int i = 0; i < expression.length(); i++)
{
if (expression[i] == ' ')
continue;
else if (isdigit(expression[i]))
{
int operand = 0;
while ((i < expression.length() && isdigit(expression[i])))
{
operand = (operand * 10) + (expression[i] - '0');
i++;
}
i--;
operandStack.push(operand);
}
else if (expression[i] == '(')
operatorStack.push(expression[i]);
else if (expression[i] == ')')
{
while (operatorStack.top() != '(')
{
int operand2 = operandStack.top();
operandStack.pop();
int operand1 = operandStack.top();
operandStack.pop();
char op = operatorStack.top();
operatorStack.pop();
int result = 0;
switch (op)
{
case '+': result = operand1 + operand2; break;
case '-': result = operand1 - operand2; break;
case '*': result = operand1 * operand2; break;
case '/': result = operand1 / operand2; break;
}
operandStack.push(result);
}
operatorStack.pop();
}
else if (expression[i] == '+' || expression[i] == '-' ||
expression[i] == '*' || expression[i] == '/')
{
while (!operatorStack.empty() && (operatorStack.top() == '*' ||
operatorStack.top() == '/'))
{
int operand2 = operandStack.top();
operandStack.pop();
int operand1 = operandStack.top();
operandStack.pop();
char op = operatorStack.top();
operatorStack.pop();
int result = 0;
switch (op)
{
case '+': result = operand1 + operand2; break;
case '-': result = operand1 - operand2; break;
case '*': result = operand1 * operand2; break;
case '/': result = operand1 / operand2; break;
}
operandStack.push(result);
}
operatorStack.push(expression[i]);
}
}
while (!operatorStack.empty())
{
int operand2 = operandStack.top(); operandStack.pop();
int operand1 = operandStack.top(); operandStack.pop();
char op = operatorStack.top(); operatorStack.pop();
int result = 0;
switch (op)
{
case '+': result = operand1 + operand2; break;
case '-': result = operand1 - operand2; break;
case '*': result = operand1 * operand2; break;
case '/': result = operand1 / operand2; break;
}
operandStack.push(result);
}
return operandStack.top();
}
int main()
{
string expression = "2 * ( 3 + 4 ) / 4";
int result = evaluateExpression(expression);
cout << "Result: " << result << endl;
return 0;
}
```
在这个例子中,我们使用了两个栈,一个用来存储操作数,另一个用来存储操作符号。首先,我们遍历整个表达式,对于每个字符进行判断,如果是操作数,我们将它压入操作数栈中。如果是左括号,我们将它压入操作符栈中。如果是右括号,我们从栈中弹出操作数和操作符号,并计算它们的值,并将结果压入操作数栈中。如果是操作符号,则我们进行运算。
最后,当表达式的所有字符处理完成后,我们对栈中剩余的元素进行计算,并返回最终结果。
以上就是您需要的算术四则运算表达式求值的简单计算器。我希望我的回答对您有所帮助!
阅读全文