您的位置:首页 > 其它

南阳oj 郁闷的c小加(一) 题目257

2015-08-01 15:43 337 查看

#include<stdio.h>

#include <string.h>

#include <stack>

#define N 1000

using namespace std;

stack<char> op;//定义保存运算符的栈

char s1
,s2
;

int priority(char ch)//定义运算符的优先级

{

int num;

switch(ch)

{

case '+':

case '-':return 1;

case '*':

case '/':return 2;

case '(':

case ')':return 0;

default:return -1;

}

}

int main()//将中缀表达式转换为后缀表达式

{

int T;

scanf("%d",&T);

op.push('#');

while(T--)

{

scanf("%s",s1);

int k=strlen(s1);

int top=-1;

for(int i=0;i<k;i++)

{

if(s1[i]>='0'&&s1[i]<='9')

{//当是数字的时候

top++;

s2[top]=s1[i];

}

else if(s1[i]=='+'||s1[i]=='-'||s1[i]=='*'||s1[i]=='/')

{ //如果当前的操作符比栈顶的操作符优先级大的话,则将当前操作符进栈

if(priority(s1[i])>priority(op.top())) op.push(s1[i]);

else

{ //当前运算符优先级小,则将栈中运算符优先级大于等于当前的都从栈出来

while(priority(op.top())>=priority(s1[i]))

{

top++;

s2[top]=op.top();//将栈顶的运算符出栈

op.pop();

}

op.push(s1[i]);//然后再把当前的运算符进栈

}

}

else if(s1[i]=='(') op.push(s1[i]);

else if(s1[i]==')')

{

while(op.top()!='(')

{

top++;

s2[top]=op.top();

op.pop();

}

op.pop();//将左括号删除

}

}

while(op.top()!='#')//如果此时符号栈仍不为空则全部出栈

{

top++;

s2[top]=op.top();

op.pop();

}

for(int i=0;i<=top;i++)

{

printf("%c",s2[i]);

}

printf("\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: