'commit'
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
测试样例:
|
||||
+ 23 34
|
||||
|
||||
/ + 4 2 * 3 5
|
||||
*/
|
||||
|
||||
// 将前缀表达式转换为后缀表达式(带空格版本)
|
||||
|
||||
// 判断字符是否是操作符
|
||||
bool isOp(string c) {
|
||||
return c == "+" || c == "-" || c == "*" || c == "/";
|
||||
}
|
||||
|
||||
string prefixToPostfix(string s) {
|
||||
stack<string> stk;
|
||||
string c; // 子串
|
||||
vector<string> 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;
|
||||
}
|
||||
Reference in New Issue
Block a user