1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include <stdio.h> #include <stdlib.h> #include <string.h> int IsNumber(char c); int IsOperator(char c); int Perform(char operation, int operand1, int operand2); int CalculatePostfix(char* expression); int main() { char expression[100]; printf("请输入后缀表达式:"); fgets(expression, sizeof(expression), stdin); expression[strcspn(expression, "\n")] = '\0';
int result = CalculatePostfix(expression); printf("输出结果为:%d\n", result);
return 0; }
int IsNumber(char c) { if (c >= '0' && c <= '9') return 1; return 0; } int IsOperator(char c) { if (c == '+' || c == '-' || c == '*' || c == '/') return 1; return 0; } int Perform(char operation, int operand1, int operand2) { if (operation == '+') return operand1 + operand2; else if (operation == '-') return operand1 - operand2; else if (operation == '*') return operand1 * operand2; else if (operation == '/') return operand1 / operand2;
printf("出现错误\n"); return -1; } int CalculatePostfix(char* expression) { int* stack = (int*)malloc(strlen(expression) * sizeof(int)); int top = -1;
for (int i = 0; i < strlen(expression); i++) { if (expression[i] == ' ' || expression[i] == ',') continue;
else if (IsOperator(expression[i])) { int operand2 = stack[top--]; int operand1 = stack[top--]; int result = Perform(expression[i], operand1, operand2); stack[++top] = result; } else if (IsNumber(expression[i])) { int operand = 0; while (i < strlen(expression) && IsNumber(expression[i])) { operand = (operand * 10) + (expression[i] - '0'); i++; } i--; stack[++top] = operand; } } int result = stack[top]; free(stack); return result; }
|