在C/C++开发一个计算器程序,实现加减乘除四则运算计算器,支持括号及嵌套。
时间: 2023-12-03 13:42:34 浏览: 269
MFC实现简单计算器(支持加减乘除和括号运算)
4星 · 用户满意度95%
好的,我可以提供一个简单的实现,具体步骤如下:
1. 定义一个字符串变量,用于存储用户输入的算式。
2. 通过cin将用户输入的算式存入字符串变量中。
3. 定义一个函数,用于将字符串中的数字和运算符提取出来,并存储到两个栈中。
4. 定义一个函数,用于计算两个数的结果。
5. 定义一个函数,用于根据运算符的优先级进行计算。
6. 定义一个函数,用于计算整个算式的结果。
以下是示例代码:
```c++
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
// 判断字符是否为数字
bool isDigit(char c) {
return c >= '0' && c <= '9';
}
// 判断字符是否为运算符
bool isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
// 将字符串中的数字和运算符提取出来,并存储到两个栈中
void parseExpression(string expr, stack<int>& nums, stack<char>& ops) {
int num = 0;
bool hasNum = false;
for (int i = 0; i < expr.length(); i++) {
char c = expr[i];
if (isDigit(c)) {
num = num * 10 + (c - '0');
hasNum = true;
} else {
if (hasNum) {
nums.push(num);
num = 0;
hasNum = false;
}
if (isOperator(c)) {
while (!ops.empty() && (ops.top() == '*' || ops.top() == '/') && (c == '+' || c == '-')) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(op == '+' ? num1 + num2 : num1 - num2);
}
ops.push(c);
} else if (c == '(') {
ops.push(c);
} else if (c == ')') {
while (ops.top() != '(') {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(op == '+' ? num1 + num2 : num1 - num2);
}
ops.pop();
}
}
}
if (hasNum) {
nums.push(num);
}
while (!ops.empty()) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(op == '+' ? num1 + num2 : num1 - num2);
}
}
// 计算两个数的结果
int calc(int num1, int num2, char op) {
if (op == '+') {
return num1 + num2;
} else if (op == '-') {
return num1 - num2;
} else if (op == '*') {
return num1 * num2;
} else if (op == '/') {
return num1 / num2;
}
return 0;
}
// 根据运算符的优先级进行计算
void calculate(stack<int>& nums, stack<char>& ops) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
int result = calc(num1, num2, op);
nums.push(result);
}
// 计算整个算式的结果
int evaluate(string expr) {
stack<int> nums;
stack<char> ops;
parseExpression(expr, nums, ops);
return nums.top();
}
int main() {
string expr;
cout << "请输入算式:" << endl;
cin >> expr;
int result = evaluate(expr);
cout << "结果为:" << result << endl;
return 0;
}
```
这个实现还有一些不足之处,比如没有对输入的算式进行校验,如果用户输入的算式不符合规范,程序可能会崩溃。但是这个实现可以帮助你了解计算器程序的基本原理。
阅读全文