PTA中缀表达式转换为后缀表达式并求值 (10 分)
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA中缀表达式转换为后缀表达式并求值 (10 分)相关的知识,希望对你有一定的参考价值。
输入样例:
6
2+4
3+2*7
2*(4+6)
(5/2+4)*5+2
(3+5)*(7-2)/4
5*(8-(3+2))
输出样例:
24+ 6
327*+ 17
246+* 20
52/4+5*2+ 32
35+72-*4/ 10
5832+-* 15
代码:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
while(n--)
{
string a;
getline(cin,a);
stack<char>op;
stack<char>fina,fina2;
for(int i=0;a[i];i++)
{
if(a[i]>='0'&&a[i]<='9') fina.push(a[i]);
else if(a[i]!=')')
{
if(op.size())
{
if(a[i]=='*'||a[i]=='/')
{
if(op.top()=='*'||op.top()=='/')
{
char ch=op.top();
op.pop();
fina.push(ch);
op.push(a[i]);
}
else op.push(a[i]);
}
else if(a[i]=='+'||a[i]=='-')
{
if(op.top()=='+'||op.top()=='-'||op.top()=='*'||op.top()=='/')
{
char ch=op.top();
op.pop();
fina.push(ch);
op.push(a[i]);
}
else op.push(a[i]);
}
else op.push(a[i]);
}
else op.push(a[i]);
}
else
{
while(op.top()!='(')
{
char ch=op.top();
op.pop();
fina.push(ch);
}
if(op.top()=='(') op.pop();
}
}
while(op.size())
{
char ch=op.top();
fina.push(ch);
op.pop();
}
stack<char>f,temp;
char ch;
while(fina.size())
{
ch=fina.top();
fina2.push(ch);
f.push(ch);
fina.pop();
}
while(fina2.size())
{
ch=fina2.top();
cout<<ch;
fina2.pop();
}
cout<<" ";
int t1=0,t2=0;
while(1)
{
ch=f.top();
temp.push(ch);
f.pop();
if(temp.top()=='+'||temp.top()=='-'||temp.top()=='*'||temp.top()=='/')
{
char opp=temp.top();
temp.pop();
ch=temp.top();
temp.pop();
t1=ch-'0';
ch=temp.top();
temp.pop();
t2=ch-'0';
switch(opp)
{
case '+':
temp.push((t2+t1)+'0');
break;
case '-':
temp.push((t2-t1)+'0');
break;
case '*':
temp.push((t2*t1)+'0');
break;
case '/':
temp.push((t2/t1)+'0');
break;
}
}
if(f.empty())
{
cout<<temp.top()-'0'<<endl;
break;
}
}
}
return 0;
}
以上是关于PTA中缀表达式转换为后缀表达式并求值 (10 分)的主要内容,如果未能解决你的问题,请参考以下文章