中缀表达式转后缀表达式(数组)

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<math.h>  
char c1[101],c2[101],c3[101];  
float a[101];  
int main(){  
    int i,j,k,m,n;  
    int top=0,v=-1,u=0;  
    gets(c1);  
    k=strlen(c1);  
    for(i=0;i<k;i++){  
      switch(c1[i]){  
      case '(':c2[++top]=c1[i];break;  
      case '+':  
      case '-':while(top>0 && c2[top]!='('){  
                 c3[++v]=c2[top];  
                 c3[++v]=' ';  
                 top--;  
               }  
               c2[++top]=c1[i];  
               break;  
      case '*':  
      case '/':while(top>0 && c2[top]!='(' && c2[top]!='+' && c2[top]!='-'){  
                 c3[++v]=c2[top];  
                 c3[++v]=' ';  
                 top--;  
               }  
               c2[++top]=c1[i];  
               break;  
      case ')':while(c2[top]!='('){  
                 c3[++v]=c2[top];  
                 c3[++v]=' ';  
                 top--;  
               }  
               top--;  
               break;  
      default:  
           c3[++v]=c1[i];  
           if(c1[i+1]>'9' || c1[i+1]<'0')  
             c3[++v]=' ';  
           break;  
      }  
    }  
    while(top>0 && c2[top]!='('){  
      c3[++v]=c2[top];  
      c3[++v]=' ';  
      top--;  
      }  
    puts(c3);  
    top=0;  
    float sum;  
    k=strlen(c3);  
    for(i=0;i<k;i++){  
        if(c3[i]==' ');  
        else if(c3[i]=='+'){sum=a[top-1]+a[top];a[--top]=sum;}  
        else if(c3[i]=='-'){sum=a[top-1]-a[top];a[--top]=sum;}  
        else if(c3[i]=='*'){sum=a[top-1]*a[top];a[--top]=sum;}  
        else if(c3[i]=='/'){sum=a[top-1]/a[top];a[--top]=sum;}  
        else{  
          int m=0;  
            while(c3[i]>='0' && c3[i]<='9'){  
              m=10*m+c3[i]-'0';  
              i++;  
            }  
            a[++top]=m;  
        }  
    }  
    printf("%.8f\n",a[top]);  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值