- 35 名前:28 mailto:sage [2005/10/16(日) 09:58:58 ]
- >>34
それを言われると痛い…….でも中置では全ての式の生成がちょっとややこしくならない? 後置だと↓な感じで再帰回して済むんだけど. #include <stdio.h> #include <limits.h> #include <math.h> #include <string.h> #define calc(stack, top, op) \ if (top < 2) return INT_MIN; \ if (#op[0] == '/' && stack[top-1] == stack[top-2]) return INT_MIN; \ stack[top-2] = stack[top-2] op stack[top-1]; --top; double eval(char* p) { double stack[100], d; int top; for (top = 0; *p != '\0'; ++p) switch (*p) { case '+': calc(stack, top, +); break; case '-': calc(stack, top, -); break; case '*': calc(stack, top, *); break; case '/': calc(stack, top, /); break; default: stack[top++] = *p - '0'; } return top == 1 ? stack[0] : INT_MIN; }
|

|