利用栈实现简单的计算器
使用栈实现简单的计算器
在本文中,我们将使用栈这种常见的数据结构来实现一个简单的计算器,可以进行基本的四则运算。我们将介绍栈的概念以及它在计算器中的应用,并提供使用C++实现计算器的完整代码。
栈的概念#
栈是一种具有后进先出(LIFO,Last-In-First-Out)特性的数据结构。它类似于我们平常使用的弹夹,最后压入的子弹会最先弹出。栈的操作包括入栈(将元素压入栈顶)和出栈(从栈顶弹出元素)。
计算器的实现#
我们将使用栈来实现一个简单的计算器,它可以进行基本的四则运算:加法、减法、乘法和除法。
1. 定义栈数据结构#
我们首先需要定义一个栈数据结构,用于存储操作数和运算符。
#include <iostream>
#include <stack>
using namespace std;
class Calculator {
private:
stack<int> numStack; // 存储操作数的栈
stack<char> opStack; // 存储运算符的栈
// 判断运算符的优先级
int priority(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return 0;
}
// 计算两个操作数的结果
int calculate(int num1, int num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num1 / num2;
default: return 0;
}
}
public:
int calculateExpression(string expression);
};
2. 实现计算方法#
接下来,我们将实现计算器的核心方法calculateExpression
,它将根据输入的表达式进行计算。
int Calculator::calculateExpression(string expression) {
for (int i = 0; i < expression.length(); i++) {
char c = expression[i];
if (isdigit(c)) {
// 处理数字,连续数字字符可能是多位数
int num = 0;
while (i < expression.length() && isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
i--; // 回退一个字符,因为for循环会再次自增
numStack.push(num);
} else if (c == '(') {
// 处理左括号,直接入栈
opStack.push(c);
} else if (c == ')') {
// 处理右括号,进行运算直到遇到左括号
while (!opStack.empty() && opStack.top() != '(') {
char op = opStack.top();
opStack.pop();
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
int result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.pop(); // 弹出左括号
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
// 处理运算符,根据优先级进行运算
while (!opStack.empty() && priority(opStack.top()) >= priority(c)) {
char op = opStack.top();
opStack.pop();
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
int result = calculate(num1, num2, op);
numStack.push(result);
}
opStack.push(c);
}
}
// 计算剩余的运算
while (!opStack.empty()) {
char op = opStack.top();
opStack.pop();
int num2 = numStack.top();
numStack.pop();
int num1 = numStack.top();
numStack.pop();
int result = calculate(num1, num2, op);
numStack.push(result);
}
return numStack.top(); // 返回最终结果
}
3. 测试计算器#
我们编写一个简单的测试函数来验证计算器的正确性。
int main() {
Calculator calculator;
string expression;
cout << "请输入表达式(例如
:3+5*2-4/2):";
cin >> expression;
int result = calculator.calculateExpression(expression);
cout << "计算结果:" << result << endl;
return 0;
}
结论#
通过使用栈这种数据结构,我们成功实现了一个简单的计算器,可以进行基本的四则运算。栈在计算机科学中有着广泛的应用,它可以用于解决许多问题,包括算术表达式的计算。希望通过本文,你对栈的概念和在计算器中的应用有了更深入的了解。
作者:keep--fighting
出处:https://www.cnblogs.com/keep--fighting/p/17565859.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探