duizhang
#include<stdio.h> int isop(char op) { char OP[6] = {'+','-','*','/','(',')'}; int i; for(i = 0;i <= 5; i++) { if(op==OP[i]) { return 1; } } return 0; } int isdigi(char digi) { if(digi >= '0' && digi <= '9') { return 1; } else { return 0; } } int isletter(char letter) { if(letter >='a' && letter <= 'z') { return 1; } else if(letter >= 'A' && letter <= 'Z') { return 1; } return 0; } int pre(char op1,char op2) { if (op1 == '(') { return -1; } if(op1 == '+' || op1 == '-') { if(op2 =='*' || op2 == '/') { return -1; } else { return 0; } } if(op1 =='*' ||op1 =='/') { if(op2 =='+'||op2 == '-') { return 1; } else { return 0; } } } //void push() //void pop() int main() { int i; int stack[101]= {0}; int top = 0; char lookhead; lookhead = getchar(); while(lookhead != '#') { if(isdigi(lookhead) == 1||isletter (lookhead) ==1) { putchar(lookhead); lookhead = getchar(); continue; } else if(isop(lookhead) == 1) { if(top == 0) { top++; stack[top] = lookhead; } else { if(lookhead == '(') { top++; stack[top] = '('; } else if(lookhead == ')') { for(i = top;stack[i] != '(';i--) { putchar(stack[i]); top--; } top --; } else if(pre(lookhead,stack[top]) == -1) { for(i = top; pre(lookhead,stack[top]) < 1;i--) { putchar(stack[i]); top--; } top ++; stack[top] = lookhead; } else { top++; stack[top] = lookhead; } } lookhead = getchar(); continue; } else if(lookhead ==' ') { lookhead = getchar(); continue; } else { printf("error"); return 0; } } if(top != 0) { for(i=top ; top > 0; i--) { if(stack[i] == '(') { printf("error"); return 0; } putchar(stack[i]); top --; } } return 0; }