c++实现一个简单的计算器,输入一个算术表达式,其运算符包含圆括号、加、减、乘、除、求余等符号,输出该算术表达式的值。要求: (1)+系统至少能实现加、减、乘、除、求余等运算; (2)+利用栈的后进先
时间: 2023-12-28 19:22:23 浏览: 126
基于c++实现的简易算术运算器
C++实现一个简单的计算器可以使用栈来实现,具体步骤如下:
1. 定义一个栈来存储操作数和运算符。
2. 读入算术表达式,逐个字符进行处理。
3. 如果当前字符是数字,则将其转换为整数并压入栈中。
4. 如果当前字符是运算符,则将其与栈顶的运算符进行比较,如果当前运算符的优先级小于等于栈顶运算符的优先级,则弹出栈顶运算符和两个操作数进行计算,并将结果压入栈中,直到当前运算符的优先级大于栈顶运算符的优先级或者栈为空,然后将当前运算符压入栈中。
5. 如果当前字符是左括号,则将其压入栈中。
6. 如果当前字符是右括号,则弹出栈顶的运算符和两个操作数进行计算,直到遇到左括号为止。
7. 重复步骤2-6,直到处理完整个表达式。
8. 最后栈中只剩下一个元素,即为表达式的值。
下面是一个简单的C++代码实现:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int priority(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/' || op == '%') return 2;
return 0;
}
int calculate(int a, int b, char op) {
if (op == '+') return a + b;
if (op == '-') return a - b;
if (op == '*') return a * b;
if (op == '/') return a / b;
if (op == '%') return a % b;
return 0;
}
int evaluate(string expr) {
stack<int> nums;
stack<char> ops;
for (int i = 0; i < expr.length(); i++) {
char c = expr[i];
if (isdigit(c)) {
int num = c - '0';
while (i + 1 < expr.length() && isdigit(expr[i + 1])) {
num = num * 10 + (expr[i + 1] - '0');
i++;
}
nums.push(num);
} else if (c == '(') {
ops.push(c);
} else if (c == ')') {
while (ops.top() != '(') {
char op = ops.top();
ops.pop();
int b = nums.top();
nums.pop();
int a = nums.top();
nums.pop();
nums.push(calculate(a, b, op));
}
ops.pop();
} else if (c == '+' || c == '-' || c == '*' || c == '/' || c == '%') {
while (!ops.empty() && priority(c) <= priority(ops.top())) {
char op = ops.top();
ops.pop();
int b = nums.top();
nums.pop();
int a = nums.top();
nums.pop();
nums.push(calculate(a, b, op));
}
ops.push(c);
}
}
while (!ops.empty()) {
char op = ops.top();
ops.pop();
int b = nums.top();
nums.pop();
int a = nums.top();
nums.pop();
nums.push(calculate(a, b, op));
}
return nums.top();
}
int main() {
string expr;
cout << "请输入算术表达式:" << endl;
cin >> expr;
int result = evaluate(expr);
cout << "计算结果为:" << result << endl;
return 0;
}
--相关问题--:
阅读全文