简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
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;
}