/*************************************************************************
> File Name: Stack.cpp
> Author:keson
> Mail:keson@bupt.edu.cn
> Created Time: 2014年11月21日 星期五 18时57分02秒
************************************************************************/
#include<iostream>
#include<vector>
#include"Stack.h"
using namespace std;
vector<char> output;
Stack<char> buffer(100);
void InfixToPostfix(const string &s)
{for(int i=0;i<s.size();i++)
{
if(s[i]!='+'&&s[i]!='*'&&s[i]!='('&&s[i]!=')')
output.push_back(s[i]);
else
{
if(buffer.Empty())
buffer.push(s[i]);
else
{
switch(s[i])
{
case '+':
while(!buffer.Empty())
{
if(buffer.back()=='(')
break;
else
{
char c=buffer.pop();
output.push_back(c);
}
}
buffer.push('+');
break;
case '*':
buffer.push('*');break;
case '(':
buffer.push('(');break;
case ')':
while(buffer.back()!='(')
{
char c=buffer.pop();
output.push_back(c);
}
buffer.pop(); //pop出’(‘
break;
default:break;
}
}
}
}
while(!buffer.Empty())
{ char c=buffer.pop();
output.push_back(c);
}
}
int main()
{
string s("a+b*c+(d*e+f)*g");
InfixToPostfix(s);
for(auto c:output)
cout<<c<<" ";
cout<<endl;
}