南阳oj 表达式求值 题目305 数据结构

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>//头文件包含遇到字母,数字函数
#define N 1001
using namespace std;
char ch1[N];//数组模拟栈进行计算
double ch2[N];
double ji(char a,int m,int n)
{
 char x='d',y='a',z='i';
 if(a==x) return (m+n);
 if(a==y) return m>n?m:n;
 if(a==z) return m<n?m:n;
}
void sum()
{
 char s[300],a[5],b;
 scanf("%s",s);
 int k,l,top1=-1,top2=-1;
 double m,n;
 k=strlen(s);
 for(int i=0;i<k;)
 {
  if(isalpha(s[i]))//判断s[i]是否是字符
  {
      top1++;
   ch1[top1]=s[i+1];//只需知道中间的字母即可
   i+=4;//把(号也跳过去了
  }
  else if(isdigit(s[i]))//判断s[i]是否是数字 
  {
   l=0;
   while(isdigit(s[i]))
            {
                 a[l]=s[i];
                 l++;
                 i++;
            }
            a[l]='\0';
            top2++;
            ch2[top2]=atof(a);
  }
  else if(s[i]==')')
  {
   m=ch2[top2];
   top2--;
   n=ch2[top2];
   top2--;
   b=ch1[top1];
   top1--;
   top2++;
   ch2[top2]=ji(b,m,n);
   i++; 
  }
  else i++;//遇到,号也跳过
 }
    printf("%.0lf\n",ch2[top2]);
}
int main()
{
 int n;
 scanf("%d",&n);
 while(n--)
 {
  sum();
 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值