简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现 0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如 8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况。
要求实现函数: int calculate(int len,char *expStr)
【输入】 int len: 字符串长度;
char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
示例
1) 输入:char *expStr = “1+4*5-8/3”
函数返回:19
2) 输入:char *expStr = “8/3*3”
函数返回:6
#include <stdio.h> #include <string.h> #include "assert.h" struct stack { //存放后续排列的表达式,模拟栈 char str[80]; int top; }; struct sstack { //存放计算表达式的值,模拟栈??? int str[80]; int top; }; int calculate(int len, char *expStr) { char *postexp = new char[len + 1]; stack opstack; sstack calstack; calstack.top = -1; opstack.top = -1; int i = 0; int k = 0; while (expStr[i] != '\0') { if (expStr[i] >= '0' && expStr[i] <= '9') { postexp[k++] = expStr[i]; } else if (expStr[i] == '+' || expStr[i] == '-') { while (opstack.top >= 0) { postexp[k++] = opstack.str[opstack.top--]; } opstack.top++; opstack.str[opstack.top] = expStr[i]; } else if (expStr[i] == '*' || expStr[i] == '/') { while (opstack.top >= 0 && (opstack.str[opstack.top] == '*' || opstack.str[opstack.top] == '/')) { postexp[k++] = opstack.str[opstack.top--]; } opstack.top++; opstack.str[opstack.top] = expStr[i]; } i++; } while (opstack.top >= 0) { postexp[k++] = opstack.str[opstack.top--]; } int temp1 = 0; int temp2 = 0; for (i = 0; i < len; i++) { if (postexp[i] >= '0' && postexp[i] <= '9') { calstack.top++; calstack.str[calstack.top] = postexp[i] - '0'; } else if (postexp[i] == '+') { temp1 = calstack.str[calstack.top--]; temp2 = calstack.str[calstack.top]; calstack.str[calstack.top] = temp2 + temp1; } else if (postexp[i] == '-') { temp1 = calstack.str[calstack.top--]; temp2 = calstack.str[calstack.top]; calstack.str[calstack.top] = temp2 - temp1; } else if (postexp[i] == '*') { temp1 = calstack.str[calstack.top--]; temp2 = calstack.str[calstack.top]; calstack.str[calstack.top] = temp2 * temp1; } else if (postexp[i] == '/') { temp1 = calstack.str[calstack.top--]; temp2 = calstack.str[calstack.top]; calstack.str[calstack.top] = temp2 / temp1; } } printf("%d\n", calstack.str[calstack.top]); return calstack.str[calstack.top]; } main() { char *expStr = "6+8*4-9/2"; int len = strlen(expStr); calculate(len, expStr); return 0; }