*expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
int calcucate(int len, char* expStr)
{
//算法思路:先乘除,后加减
assert(expStr != NULL);
len = strlen(expStr);//防止函数调用者粗心传错参数
int result = 0;
char* temp = new char[len];
char* temp2 = temp;
memset(temp,0,len);
//先做乘除运算
for (int i=0; i
{
if (*(expStr+i) != '*' &&
*(expStr+i) != '/')
{
*temp = *(expStr+i);
temp++;
}
else
{
if (*(expStr+i) == '*')
{
int a = (*(expStr+i-1) - 48);
int b = (*(expStr+i+1) - 48);
*temp= (*--temp - 48) * (*(expStr+i+1) - 48) + 48;
temp++;
i += 1;
}
else
if (*(expStr+i) == '/')
{
*temp = (*--temp - 48) / (*(expStr+i+1) - 48) + 48;
temp++;
i += 1;
}
}
}
//后做加减运算
for (int i=0; i
{
if (*(temp2+i)<='9'
&& * (temp2+i)>='0'
)
{
result += *(temp2+i) - 48;
}
else
{
if (*(temp2+i) == '-')
{
result -= *(temp2+i+1) - 48;
i += 1;
}
else
{
result += *(temp2+i+1) - 48;
i += 1;
}
}
}
temp -= strlen(temp2);
delete []temp; //new 出来的内存,用完后请释放,且不要忘了执行上一语句,否则运行报错。
return result;
}
转自:http://topic.csdn.net/u/20111025/23/18936b47-d9b0-48db-a49a-97c2be52fad5.html