Finding derivative of a function stored in a character array

前端 未结 3 1963
后悔当初
后悔当初 2021-01-26 11:30

What I need to do is read a file which contains equations. I need to take the derivative of each equation and then write those derivative equations in a different .txt file. I\'

3条回答
  •  独厮守ぢ
    2021-01-26 11:53

    This function will parse the text, cut it in to different parts identified by type[i], stores in a structure. It recognizes x, +, -, and numbers. It can be expand it to include other operators etc.

    #define maxlen 50
    
    #define idx         0 //X variable
    #define idnumber    1 //number
    #define idplus      2 //+ sign
    #define idminus     3 //- sign
    
    struct foo
    {
        int type[10];//each type can be a number (idnum), +, -, etc.
        int num[10];//if type[i] is number then num[i] identifies that number
        int count;//total number of parts
    };
    
    void parse_one_line(struct foo *v, const char *s)
    {
        char buf[maxlen];
        memset(buf, 0, maxlen);
        int j = 0;
        //remove white spaces
        for (int i = 0, len = strlen(s); i < len; i++)
        {
            if (s[i] == ' ') continue;
            buf[j] = s[i];
            j++;
        }
    
        char part[maxlen];
        v->count = 0;
        for (int i = 0, len = strlen(buf); i < len; i++)
        {
            char c = buf[i];
            if (c == 'x')
            {
                v->type[v->count] = idx;
                v->count++;
            }
            else if (c == '+')
            {
                v->type[v->count] = idplus;
                v->count++;
            }
            else if (c == '-')
            {
                v->type[v->count] = idminus;
                v->count++;
            }
            else if (c >= '0' && c <= '9')
            {
                int j = 0;
                memset(part, 0, maxlen);
                for (; i < len; i++)
                {
                    c = buf[i];
                    if (c >= '0' && c <= '9')
                    {
                        part[j] = c;
                        j++;
                    }
                    else
                    {
                        break;
                    }
                }
                i--;
                v->num[v->count] = atoi(part);
                v->type[v->count] = idnumber;
                v->count++;
            }
        }
        for (int i = 0; i < v->count; i++)
        {
            switch (v->type[i])
            {
            case idnumber: printf("%d", v->num[i]); break;
            case idx: printf("X"); break;
            case idplus: printf("+"); break;
            case idminus: printf("-"); break;
            default:break;
            }
        }
        printf("\n");
    }
    
    int main()
    {
        struct foo st;
        parse_one_line(&st, "-23x + 2 + 2x - 3");
        return 0;
    }
    

提交回复
热议问题