zoukankan      html  css  js  c++  java
  • 表达式计算

    虽然我们学了许久的程序设计,但对于简单的四则混合运算式,如果让我们完全白手起家地编程来解析,还是有点棘手。

    这里,我们简化一下问题,假设只有加法和乘法,并且没有括号来改变优先级。
    再假设参加运算的都是正整数。

    在这么多的限制条件下,表达式的解析似乎简单了许多。
    下面的代码解决了这个问题。请仔细阅读源码,并填写划线部分缺少的代码。

    #include <stdio.h>
    
    int f3(const char* s, int begin, int end)
    {
        int sum = 0;
        int i;
        for(i=begin; i<end; i++){
            if(s[i]==' ') continue;
            sum = sum * 10 + (s[i]-'0');
        }
        return sum;
    }
    
    int f2(const char* s, int begin, int end)
    {
        int p = begin;
        int pro = 1;
        while(1){
            int p0 = p;
            while(p!=end && s[p]!='*') p++;
            pro *= ;  //填空
            if(p==end) break;
            p++;
        }
        printf("f2: pro=%d
    ", pro);
        return pro;
    }
    
    int f(const char* s)
    {
        int p = 0;
        int sum = 0;
        while(1){
            int p0 = p;
            while(s[p]!=0 && s[p]!='+') p++;
            sum += f2(s,p0,p);
            if(s[p]==0) break;
            p++;
        }
    
        return sum;
    }
    
    int main()
    {
        int x = f("12+18+5*4*3+10");
        printf("%d
    ", x);
        return 0;
    }

    注意:只填写划线处缺少的内容,不要填写已有的代码或符号,也不要填写任何解释说明文字等。

     填空处位于函数f2,f2实际上计算一连串的乘法,由于是在字符串中,多位数是需要计算的,所以调用f3计算多位数。

  • 相关阅读:
    《JS高级程序设计》之七
    《JS高级程序设计》之六
    《JS》之原型链
    《JS高级程序设计》之五
    《JS高级程序设计》之四
    Spring Cloud Config自动刷新配置
    Rancher自动构建部署服务
    OpenStack实例noVNC URL获取
    Jenkins配置构建Maven项目并打包Docker镜像推送至私仓
    服务注册中心,Eureka与Zookeeper比较
  • 原文地址:https://www.cnblogs.com/8023spz/p/10664422.html
Copyright © 2011-2022 走看看