四则运算程序

来源:互联网 发布:杭州美工培训机构 编辑:程序博客网 时间:2024/05/22 08:23

/*************************************************************************    > Created Time: 2014年06月18日  ************************************************************************/#include<stdio.h>#include<string.h>double arithmetic(char *str){    if(str == NULL)return -1;    char token_stack[100];    double num_stack[100];    int token_index =0, num_index = 0;    int len = strlen(str);    for(int i = 0; i < len; i++)    {        if(*(str+i) >= '0' && *(str+i) <= '9')        {            num_stack[num_index++] = *(str+i)-'0';            continue;        }        if(*(str+i) == '+' || *(str+i) == '-')        {            token_stack[token_index++] = *(str+i);            continue;        }        if(*(str+i) == '*')        {            num_stack[num_index-1] = num_stack[num_index-1] * (*(str+i+1)-'0');            i++;            continue;        }        if(*(str+i) == '/')        {            num_stack[num_index-1] = num_stack[num_index-1] / (*(str+i+1)-'0');            i++;            continue;        }    }    num_index--;    for(int i = token_index-1; i >= 0; i--)    {        if(token_stack[i] == '+')        {            num_stack[--num_index] = num_stack[num_index] + num_stack[num_index+1];            continue;        }        if(token_stack[i] == '-')        {            num_stack[--num_index] = num_stack[num_index] - num_stack[num_index+1];            continue;        }    }    return num_stack[0];}int main(){    char str[100];    printf("请输入一个字符串:\n");    scanf("%s",str);    printf("%f\n",arithmetic(str));    return 0;}

#include <stdio.h>#include <string.h>int calc(const char *s, const char *e){    int layer = 0;    const char *p;    for (p = e; p >= s; --p) {        switch (*p) {        case ')': ++layer; break;        case '(': --layer; break;        case '+':            if (0 == layer) return calc(s, p - 1) + calc(p + 1, e);            break;        case '-':            if (0 == layer) return calc(s, p - 1) - calc(p + 1, e);            break;        }    }    for (p = e; p >= s; --p) {        switch (*p) {        case ')': ++layer; break;        case '(': --layer; break;        case '*':            if (0 == layer) return calc(s, p - 1) * calc(p + 1, e);            break;        case '/':            if (0 == layer) return calc(s, p - 1) / calc(p + 1, e);            break;        }    }        if ('(' == *s && ')' == *e) return calc(s + 1, e - 1);    return atoi(s);}


0 0
原创粉丝点击