pat Data_stucture 表達式轉換-棧的應用

#include<iostream>
#include<stack>
using namespace std;

bool p[5][5]=
{
	1,1,0,0,1,
	1,1,0,0,1,
	1,1,1,1,1,
	1,1,1,1,1,
	0,0,0,0,1
};

int con(char ch)
{
	switch(ch)
	{
		case'+': return 0;
		case'-': return 1;
		case'*': return 2;
		case'/': return 3;
		case'#': return 4;
	}
}
int main()
{
	char s[21];
	stack<char> op;
	cin>>s;
	int i=0;
	op.push('#');
	while(s[i]=='(')
	{
		op.push(s[i]);
		++i;
	}
	if(s[i]=='+'||s[i]=='-')
	{
		cout<<s[i];
		++i;
	}
	while((s[i]>='0'&&s[i]<='9')||s[i]=='.')
	{
		cout<<s[i];
		++i;
	}
	while(s[i]!='\0')
	{
		if(s[i]=='(')
		{
			op.push('(');
			++i;
			if(s[i]=='+'||s[i]=='-')
			{
				++i;
			}
		}
		else if(s[i]==')')
		{
			while(op.top()!='(')
			{
				cout<<' '<<op.top();
				op.pop();
			}
			op.pop();
			++i;
		}			
		else if(s[i]<='9'&&s[i]>='0')
		{
			cout<<' ';
			if(s[i-2]=='('&&s[i-1]=='-') cout<<'-';
			while((s[i]<='9'&&s[i]>='0')||s[i]=='.')
			{
				cout<<s[i];
				++i;
			}
		}
		else
		{
			while(op.top()!='('&&p[con(op.top())][con(s[i])]==1)
			{
				cout<<' '<<op.top();
				op.pop();
			}
			op.push(s[i]);
			++i;
		}
		
	}
	while(op.top()!='#')
	{
		cout<<' '<<op.top();
		op.pop();
	}

}
				

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章