#include using namespace std; /* 测试样例: + 23 34 / + 4 2 * 3 5 */ // 将前缀表达式转换为后缀表达式(带空格版本) // 判断字符是否是操作符 bool isOp(string c) { return c == "+" || c == "-" || c == "*" || c == "/"; } string prefixToPostfix(string s) { stack stk; string c; // 子串 vector q; stringstream s1(s); // 构造字符串流,处理带空格的后缀表达式 while (s1 >> c) q.push_back(c); // 将每个子串抽取出来 for (int i = q.size() - 1; i >= 0; i--) { string c = q[i]; if (isOp(c)) { string a = stk.top(); stk.pop(); string b = stk.top(); stk.pop(); stk.push(a + " " + b + " " + c); } else stk.push(c); // 如果是操作数,将其转换为整数并入栈 } return stk.top(); } int main() { string prefix = "/ + 4 2 * 3 5"; // / + 4 2 * 3 5 --> vector<>={/ + 4 2 * 3 5} string postfix = prefixToPostfix(prefix); cout << "前缀表达式: " << prefix << endl; cout << "后缀表达式: " << postfix << endl; return 0; }