简易计算器c++语言利用栈
时间: 2023-06-27 15:06:45 浏览: 119
c++计算器 基于栈
4星 · 用户满意度95%
以下是一个简单的基于栈实现的计算器,可以进行加减乘除的计算。
```cpp
#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;
}
}
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;
}
}
int main() {
stack<int> num_stack;
stack<char> op_stack;
string input;
cout << "请输入一个表达式:" << endl;
cin >> input;
for (int i = 0; i < input.length(); i++) {
char c = input[i];
if (isdigit(c)) {
int num = c - '0';
while (i + 1 < input.length() && isdigit(input[i + 1])) {
num = num * 10 + input[i + 1] - '0';
i++;
}
num_stack.push(num);
} else if (c == '(') {
op_stack.push(c);
} else if (c == ')') {
while (op_stack.top() != '(') {
char op = op_stack.top();
op_stack.pop();
int num2 = num_stack.top();
num_stack.pop();
int num1 = num_stack.top();
num_stack.pop();
int result = calculate(num1, num2, op);
num_stack.push(result);
}
op_stack.pop();
} else {
while (!op_stack.empty() && priority(op_stack.top()) >= priority(c)) {
char op = op_stack.top();
op_stack.pop();
int num2 = num_stack.top();
num_stack.pop();
int num1 = num_stack.top();
num_stack.pop();
int result = calculate(num1, num2, op);
num_stack.push(result);
}
op_stack.push(c);
}
}
while (!op_stack.empty()) {
char op = op_stack.top();
op_stack.pop();
int num2 = num_stack.top();
num_stack.pop();
int num1 = num_stack.top();
num_stack.pop();
int result = calculate(num1, num2, op);
num_stack.push(result);
}
cout << "计算结果为:" << num_stack.top() << endl;
return 0;
}
```
该计算器采用了两个栈,一个用于存放数字,另一个用于存放运算符。在读入表达式字符串时,遇到数字则直接入数字栈,遇到左括号则直接入运算符栈,遇到右括号则弹出运算符栈中的运算符,直到遇到左括号为止,并将这段括号内的表达式进行计算并将结果入数字栈。对于其他运算符,则需要判断其优先级,如果当前运算符的优先级低于栈顶运算符的优先级,则需要先将栈顶运算符弹出并进行计算,直到栈顶运算符的优先级低于当前运算符为止,然后将当前运算符入运算符栈。最后,将剩余的运算符全部弹出并进行计算,得到最终的计算结果。
阅读全文