void result (char * string, int n) { char exp; char *p; int num, num3; int num1, num2; int i = 0, j = 0; int flag = 0; int tmp[MAXSIZE]; char ope[MAXSIZE]; Operate *operate; Number *number; operate = init_operate(); number = init_number(); p = string; while (*p != '\0') { num = 0; flag = 0; while ((*p) >= '0' && (*p) <= '9') { flag = 1; num = (*p - '0') + num * 10; p++; } if (flag == 1) { tmp[i++] = num; push_num(number, num); // printf("压栈%d大小%d\n", num, number->len); } if (if_operte(*p) == 1) { pop_num(number, &num1); pop_num(number, &num2); // printf("弹出%d %d\n", num1, num2); // printf("还剩%d\n", number->len); push_num(number, calculate(num2, num1, *p)); top_number(number, &num3); /// printf("%d %c %d = %d\n", num2, *p, num1, num3); // printf("压栈%d\n", calculate(num2, num1, *p)); } p++; } top_number(number, &num); printf("结果是%d\n", num); }
void eval(stack **n_stack, stack **o_stack, double *x, double *y){ //Using easier names char op=top_operator(*o_stack); double n1, n2; //Checking the different cases for the top of the stack if(op=='='){ pop_operator(&(*o_stack)); if(pop_operator(&(*o_stack))=='x') *x=top_number(*n_stack); else *y=top_number(*n_stack); } else if(op=='x'){ pop_operator(&(*o_stack)); push_number(*x, &(*n_stack)); } else if(op=='y'){ pop_operator(&(*o_stack)); push_number(*y, &(*n_stack)); } else{//Push the computed result into the n_stack n1=pop_number(&(*n_stack)); n2=pop_number(&(*n_stack)); op=pop_operator(&(*o_stack)); push_number(compute(n1, op, n2), &(*n_stack)); } }