码迷,mamicode.com
首页 > 其他好文 > 详细

表达式计算

时间:2019-04-07 12:47:38      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:NPU   pre   符号   并且   完全   const   div   5*   i++   

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

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

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

 

#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\n", 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\n", x);
    return 0;
}

 

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

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

 

表达式计算

标签:NPU   pre   符号   并且   完全   const   div   5*   i++   

原文地址:https://www.cnblogs.com/8023spz/p/10664422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!