首页 > 代码库 > 一个简单的四则运算

一个简单的四则运算

这是一道笔试题,用c或c++编程实现+,-,*,/四种运算符的四则运算,运算式存放在一个字符数组中char str[]。如给定字符数组 char str[] = "3+2*5", 那么输出结果为13.

/*************************************************************************    > 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;}

这里简单说明下,使用两个数组,一个double数组模拟数字栈,一个字符数组模拟符号栈。当遇到乘法和除法直接进行计算,当遇到加法和减法则压栈。当字符串遍历完毕后,从符号栈开始从后向前(或从前向后)以此出栈,同时计算相应的数字。