中缀式变后缀式
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
- 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#define maxn 1010
using namespace std;
stack<char>op;
int main()
{
int n,f;
char s[maxn];
scanf("%d",&n);
while(n--)
{
scanf("%s",s);
int lens=strlen(s);
for(int i=0;i<lens;++i)
{
f=0;
while((s[i]>='0'&&s[i]<='9')||s[i]=='.')
f=1,printf("%c",s[i++]);
if(f)
printf(" ");
if(s[i]=='(')
op.push(s[i]);
else if(s[i]==')')
{
while(op.top()!='(')
{
printf("%c ",op.top());
op.pop();
}
op.pop();
}
else if(s[i]=='=')
{
while(!op.empty())
{
printf("%c ",op.top());
op.pop();
}
printf("=\n");
}
else if(op.empty())
op.push(s[i]);
else
{
if(s[i]=='+'||s[i]=='-')
{
while(!op.empty()&&op.top()!='(')
{
printf("%c ",op.top());
op.pop();
}
op.push(s[i]);
}
else
{
while(!op.empty()&&op.top()!='('&&op.top()!='+'&&op.top()!='-')//这类型的判断要记得先判断栈非空 否则可能会出现非法访问 RE
{
printf("%c ",op.top());
op.pop();
}
op.push(s[i]);
}
}
}
}
return 0;
}