问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注: 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> int calculate(int len, char *expStr) { int i, count1 = 0, count2 = 0; int number[50]; char op[50]; int sign = 1; for(i = 0; i < len; i++) { if(expStr[i] <= '9' && expStr[i] >= '0') number[count1++] = expStr[i] - '0'; else op[count2++] = expStr[i]; } for(i = 0; i < count2; i++) { switch(op[i]) { case '*': number[i + 1] = number[i] * number[i + 1]; number[i] = 0; op[i] = (sign == 1) ? '+' : '-'; //op[i] = '+'; break; case '/': number[i + 1] = number[i] / number[i + 1]; number[i] = 0; op[i] = (sign == 1) ? '+' : '-'; //op[i] = '+'; break; case '+': sign = 1; break; case '-': sign = -1; break; default:break; } } for(i = 0; i < count2; i++) { switch(op[i]) { case '+': number[i + 1] = number[i] + number[i + 1]; break; case '-': number[i + 1] = number[i] - number[i + 1]; break; case '*': case '/': default:break; } } return number[count2]; } int main() { char expStr[50]; gets(expStr); int result = calculate(strlen(expStr), expStr); printf("运算结果为:%d", result); }