表达式计算

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

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

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

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

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