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计算多位数。

  • 相关阅读:
    extjs__(grid Panel绑定数据)
    web项目中对post请求乱码处理
    lucene之Field属性的解释
    spring整合mybatis框架
    jasperreports实现pdf文档的生成
    ireport图形化界面生成pdf文档
    iText框架(生成pdf文档)
    spring配置问题
    动手实践PHP7的HashTable
    基于epoll实现一个IO多路复用的回声服务器
  • 原文地址:https://www.cnblogs.com/8023spz/p/10664422.html
Copyright © 2011-2022 走看看