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

给大家推荐个靠谱的公众号程序员探索之路,大家一起加油

#include<stdio.h>
#include <string.h>
#include <stack>
#define N 1000
using namespace std;
stack<char> op;//定义保存运算符的栈
char s1[N],s2[N]; 
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值