求算术表达式的值

#include<cstdio>
#include<cstdlib>
#include<cstring>
int  number[101],i=0, p=1;
char symbol[101],s[256], t[256];  
void push(){
  	symbol[++p]=s[i];
}
void pop(){
   	switch (symbol[p--]){
      	case '+':number[p]+=number[p + 1];break;
		case '-':number[p]-=number[p + 1];break;
      	case '*':number[p]*=number[p + 1];break;
      	case '/':number[p]/=number[p + 1];break;
   	}
}
bool can(){
  	if((s[i]=='+'||s[i]=='-')&&symbol[p]!='(')
	  	return 1;
  	if((s[i]=='*'||s[i]=='/')&&(symbol[p]=='*'||symbol[p]=='/'))
	  	return 1;
  	return 0;
}
int main(){  
 	printf("String :");gets(s);
  	s[strlen(s)]=')';symbol[p]='(';
	while(i<strlen(s)){
		while (s[i]=='('){
			push();
			i++;
		}
      	int x=0;
		while(s[i]>='0'&&s[i]<='9')
         	x=x*10+s[i++]-'0';
      	number[p]=x;
      	do{  
          	if (s[i]==')'){
            	while(symbol[p]!='(')
					pop();
            	number[--p]=number[p+1];
            }
          	else{
            	while(can())
					pop();
            	push();
          	}
        	i++;
      	}while(i<strlen(s)&&s[i-1]==')');
	}
  	printf("Result=%d", number[0]);
  	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值