1. 程式人生 > >輸入一個只包含個位數字的簡單四則表示式字串,計算該表示式的值

輸入一個只包含個位數字的簡單四則表示式字串,計算該表示式的值

問題描述】: 輸入一個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值注:
 1、表示式只含 +, -, *, / 四則運算子,不含括號
2、表示式數值只包含個位整數(0-9),且不會出現0作為除數的情況
3、要考慮加減乘除按通常四則運算規定的計算優先順序
4、除法用整數除法,即僅保留除法運算結果的整數部分。比如8/3=2。輸入表示式保證無0作為除數情況發生
5、輸入字串一定是符合題意合法的表示式,其中只包括數字字元和四則運算子字元,除此之外不含其它任何字元,不會出現計算溢位情況• 
要求實現函式: int calculate(int len,char *expStr)
【輸入】 int len: 字串長度;char *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<len; 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<strlen(temp2); 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;
}