/* * 打印真值表 * bPrint : 是否输出到StdOut */ int *print_table(const char *exp, ExpInfo *info, Bool bPrint) { int *result; int i, j, cols, rows, tmp, count; char *suffix, row[MAX_LETTERS]; cols = info->cols; rows = info->rows; result = (int *)calloc(rows , sizeof(int)); if (bPrint) { for (i = 0; i < MAX_LETTERS; ++i) { if (info->elem[i]) { printf("\t%c", i + 'A'); } } printf("\t%s\n", exp); } suffix = infix_to_suffix(exp); for (i = 0; i < rows; i++) { count = 0; tmp = i; memset(row, 0, sizeof(row)); /* 通过将十进制转换成二进制来生成每行的序列 */ do { row[count++] = tmp % 2; tmp /= 2; } while (tmp != 0); strReverse(row, cols); result[i] = eval(row, suffix, info); if (bPrint) { for (j = 0; j < cols; j++) { printf("\t%d", row[j]); } printf("\t%d\n", result[i]); } } free(suffix); return result; }
int main(void) { char exp_infix[MAX_LEN]; char exp_suffix[MAX_LEN]; int i = 0; printf("Please input a infix expression:\nInfix expression:"); scanf("%s", exp_infix); infix_to_suffix(exp_infix, exp_suffix); printf("Suffix expression:"); while (exp_suffix[i] != '\0') { printf("%c",exp_suffix[i++]); } printf("\n"); printf("%s = %d\n", exp_infix, get_value(exp_suffix)); return 0; }
int main(int argc, char **argv) { char infix[MAX_BUFF] = { 0 }; int prefix[MAX_BUFF]; /* storage for infix elements */ int suffix[MAX_BUFF]; /* suffix representation */ int infix_cnt, suffix_cnt, result; sEleType dat[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; printf("input a expr to eval:\n"); scanf("%s", infix); printf("infix notation : %s\n", infix); infix_cnt = infix_parser(infix, prefix); print_expr_result("mid representation is", prefix, infix_cnt); suffix_cnt = infix_to_suffix(prefix, infix_cnt, suffix); print_expr_result("suffix representation is", suffix, suffix_cnt); result = calc_suffix_expr(suffix, suffix_cnt); printf("eval %s is %d\n", infix, result); return 0; }