码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-01 17:27:23      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:


#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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:

原文地址:http://blog.csdn.net/yueloveme/article/details/47187005

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!