以下是为您补充完善的代码: ```cpp #include <cstdlib> #include <iostream> #include <string> #include <sstream> using namespace std; template <class T> class ArrayStack { private: int maxsize; //栈中最多保存的元素个数 int top; //指向栈顶元素空间编号,初始化为-1,入栈时top+1,出栈时top-1 T* st; //栈的元素存储的起始地址 public: ArrayStack(int sz = 100) { maxsize = sz; top = -1; st = new T[maxsize]; } ~ArrayStack() { delete[] st; } bool isEmpty() { return top == -1; } bool isFull() { return top == maxsize - 1; } void push(T x) { if (isFull()) { cout << "Stack Overflow" << endl; return; } st[++top] = x; } T pop() { if (isEmpty()) { cout << "Stack Underflow" << endl; return -1; } return st[top--]; } T getTop() { if (isEmpty()) { cout << "Stack is Empty" << endl; return -1; } return st[top]; } }; class Calculator { private: string infixExpression; string suffixExpression; public: Calculator(string expression) { infixExpression = expression; } // 将中缀表达式转换为后缀表达式 void infixToSuffix() { ArrayStack<char> opStack; for (char c : infixExpression) { if (isdigit(c)) { suffixExpression += c; } else if (c == '(') { opStack.push(c); } else if (c == ')') { while (!opStack.isEmpty() && opStack.getTop()!= '(') { suffixExpression += opStack.pop(); } opStack.pop(); } else { while (!opStack.isEmpty() && precedence(c) <= precedence(opStack.getTop())) { suffixExpression += opStack.pop(); } opStack.push(c); } } while (!opStack.isEmpty()) { suffixExpression += opStack.pop(); } } // 计算后缀表达式的值 void calSuffix() { ArrayStack<int> numStack; for (char c : suffixExpression) { if (isdigit(c)) { numStack.push(c - '0'); } else { int num2 = numStack.pop(); int num1 = numStack.pop(); int result; switch (c) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2!= 0) { result = num1 / num2; } else { cout << "Error: Division by zero" << endl; return; } break; } numStack.push(result); } } cout << "Result: " << numStack.pop() << endl; } private: int precedence(char op) { if (op == '+' || op == '-') { return 1; } else if (op == '*' || op == '/') { return 2; } return 0; } }; int main() { string expression = "3+4*2/(1-5)"; Calculator calculator(expression); calculator.infixToSuffix(); calculator.calSuffix(); return 0; } ``` 这段代码实现了一个简单的中缀表达式转后缀表达式并计算的计算器功能。您可以根据实际需求进行修改和扩展。 [2024-10-12 20:35:40 | AI写代码神器 | 979点数解答]