该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
case '/' : symbol[s_cnt++] = '/'; break;
case '%' : symbol[s_cnt++] = '%'; break;
case '(' : symbol[s_cnt++] = '('; sign = 1; break;
case ')' : symbol[s_cnt++] = ')'; sign = 0; break;
default : return -1; //既不是数字也不是符号那一定是错了, 尽可能快的停止
}
}
}
digit[n_cnt++] = sum;
digit[n_cnt] = symbol[s_cnt] = '\0';
return n_cnt;
}
/*
开始想的是处理一次如括号乘除等运算就将位置清零,
后来发现需要太多的分析语句并且分析括号后位置无法准确计算,
最终选择每处理一次就将剩余的重新存入数组
*/
int init_digit(double digit[], double dig[], int sz)
{
int i, cnt = 0;
for (i = 0; i < sz; ++i) {
if (digit[i] != '\0')
dig[cnt++] = digit[i];
digit[i] = '\0';
}
dig[cnt] = '\0';
return cnt;
}
int init_symbol(char symbol[], char sym[], int sz)
{
int i, cnt = 0;
for (i = 0; i < sz; ++i) {
if (symbol[i] != '\0')
sym[cnt++] = symbol[i];
symbol[i] = '\0';
}
sym[cnt] = '\0';
return cnt;
}
int process_pracket(double digit[], char symbol[], double dig[], char sym[], int s_sz, int sz)
{
int i, j;
for (i = 0; i < s_sz; ++i) {
if (symbol[i] == '(') {
for (j = i + 1; symbol[j] != ')'; ++j) {
switch(symbol[j]) {
case '*' : digit[j] = digit[j - 1] * digit[j];
digit[j - 1] = symbol[j] = '\0'; break;
case '/' : digit[j] = digit[j - 1] / digit[j];
digit[j - 1] = symbol[j] = '\0'; break;
case '%' : digit[j] = (int)digit[j - 1] % (int)digit[j];
digit[j - 1] = symbol[j] = '\0'; break;
}
}
sz = init_digit(digit, dig, sz);
s_sz = init_symbol(symbol, sym, s_sz);;
for (j = i + 1; sym[j] != ')'; ++j)
if (sym[j] == '+') {
dig[j] = dig[j - 1] + dig[j];
dig[j - 1] = sym[j] = '\0';
}
else if (sym[j] == '-') {
dig[j] = dig[j - 1] - dig[j];
dig[j - 1] = sym[j] = '\0';
}
sym[i] = sym[j] = '\0';
i = j - 1;
sz = init_digit(dig, digit, sz);
s_sz = init_symbol(sym, symbol, s_sz);
}
}
return sz;
}
double figure(double digit[], char symbol[], int n_sz)
{
int s_sz, i, j, cnt, sz, sign = 0;
double sum = 0.0, dig[SIZE] = {0};