解題心得:
注意優先順序。
程式碼:
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
using namespace std;
int priority(char c)
{
if (c == '*' || c == '/') return 0;
if (c == '+' || c == '-') return 1;
else return 2;
}
int main()
{
string s;
while (getline(cin, s))
{
stringstream ss(s);
stack<char> st;
st.push('(');
s += ")";
for (int l = 0; l < s.size(); l++)
{
if (s[l] == ' ') continue;
if (s[l] == '(') st.push('(');
else if (s[l] == ')')
{
while (st.top() != '(')
{
cout << st.top() << " ";
st.pop();
}
st.pop();
}
else if ('a' <= s[l] && s[l] <= 'z')
{
cout << s[l] << " ";
}
else
{
while (priority(st.top()) <= priority(s[l]))
{
cout << st.top() << " ";
st.pop();
}
st.push(s[l]);
}
}
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
cout << endl;
}
return 0;
}
沒有留言:
張貼留言