华为上机题 求简单四则运算

问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
3.1、表达式只含 +, -, *, / 四则运算符,不含括号
3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3.3、要考虑加减乘除按通常四则运算规定的计算优先级
3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
3.5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
要求实现函数:
int calculate(int len,char *expStr)

 

#include <iostream>
#include <stack>


using namespace std;

int calculate(char *pstr)
{
 if(pstr==NULL && *pstr=='\0')
  return 0;
    stack<int> num;
 stack<char> op;
    int x1,x2,value;

 for(int i=0;pstr[i]!='\0';++i)
 {
    if( pstr[i] >='0' && pstr[i] <='9' )
    {
     num.push(pstr[i]-'0');
    }
  
    else if((pstr[i]=='*' || pstr[i]=='/') && !op.empty() && (op.top()=='+' || op.top()=='-') || op.empty()  )
    {
           op.push(pstr[i]);
    }
    else
    {
           while( !((pstr[i]=='*' || pstr[i]=='/') && !op.empty() && (op.top()=='+' || op.top()=='-') || op.empty() ) )
     {
      x2=num.top();
      num.pop();
      x1=num.top();
      num.pop();
      switch(op.top())
      {
      case '*':
       value=x1*x2;
       break;
      case '/':
       if(x2==0)
        return 0;
       value=x1/x2;
       break;
      case '+':
       value=x1+x2;
       break;
      case '-':
       value=x1-x2;
       break;
      default:
       break;
      }
      num.push(value);
      op.pop();
  
     }
     op.push(pstr[i]);
    }
 }
   
 while(!op.empty())
 {
  x2=num.top();
  num.pop();
  x1=num.top();
  num.pop();

  switch(op.top())
  {
   case '*':
    value=x1*x2;
    break;
   case '/':
    if(x2==0)
     return 0;
    value=x1/x2;
    break;
   case '+':
    value=x1+x2;
    break;
   case '-':
    value=x1-x2;
    break;
   default:
       break;
  }
  num.push(value);
  op.pop();
 }
    return num.top();
}

int main()
{
    cout<<calculate("1+4*5-8/3")<<endl;
 return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值