" 二哥,你可以使用C++编写一个简单的计算器程序,该程序可以接受用户输入的表达式,并计算其结果。以下是一个基本的C++程序,可以实现这个功能:
```c++
#include <iostream>
#include <string>
#include <stack>
#include <map>
using namespace std;
int main() {
string expression;
cout << "请输入一个表达式: ";
getline(cin, expression);
stack<double> nums; // 用于存储数字的栈
stack<char> ops; // 用于存储操作符的栈
map<char, int> precedence = {
{'+', 1},
{'-', 1},
{'*', 2},
{'/', 2},
};
for (size_t i = 0; i < expression.size(); i++) {
char c = expression[i];
if (isdigit(c)) { // 如果是数字
double num = c - '0';
while (i + 1 < expression.size() && isdigit(expression[i + 1])) {
num = num * 10 + (expression[++i] - '0');
}
nums.push(num);
} else if (isalpha(c)) { // 如果是变量
double num = 0;
while (i + 1 < expression.size() && isalpha(expression[i + 1])) {
num = num * 26 + (expression[++i] - 'a') + 1;
}
nums.push(num);
} else if (c == '(') { // 如果是左括号
ops.push(c);
} else if (c == ')') { // 如果是右括号
while (!ops.empty() && ops.top() != '(') {
double b = nums.top(); nums.pop();
double a = nums.top(); nums.pop();
nums.push(apply_operator(ops.top(), a, b));
ops.pop();
}
if (ops.empty() || ops.top() != '(') {
cout << "表达式错误!" << endl;
return 1;
}
ops.pop();
} else { // 如果是操作符
while (!ops.empty() && precedence[ops.top()] >= precedence[c]) {
double b = nums.top(); nums.pop();
double a = nums.top(); nums.pop();
nums.push(apply_operator(ops.top(), a, b));
ops.pop();
}
ops.push(c);
}
}
while (!ops.empty()) {
double b = nums.top(); nums.pop();
double a = nums.top(); nums.pop();
nums.push(apply_operator(ops.top(), a, b));
ops.pop();
}
cout << "结果为: " << nums.top() << endl;
return 0;
}
double apply_operator(char op, double a, double b) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
```
这个程序首先接受用户输入的表达式,然后使用两个栈来存储数字和操作符。程序使用一个map来存储操作符的优先级。然后,程序遍历表达式,根据不同的字符进行相应的操作。如果是数字或变量,就将其压入数字栈;如果是左括号,就将其压入操作符栈;如果是右括号,就将操作符栈中的操作符依次弹出并计算,直到遇到左括号为止;如果是操作符,就将其压入操作符栈,并在需要的时候弹出栈顶的操作符进行计算。最后,程序弹出栈中的所有操作符并进行计算,输出结果。"