예제 #1
0
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);

}
예제 #2
0
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));
	}
}