#include #include #define vypis 0 void getpar(char *s, char *s1, char *s2, char *ops) { int open=1,i; ops[0]=0; for (i=0;i0) if (strchr("+-*/",s[i-1])!=NULL) op0=s[i-1]; getpar(s+i+1,s1,s2,ops); if (strlen(s2)>0) if (strchr("+-*/",s2[0])!=NULL) { op1=s2[0]; strcpy(s2,s2+1); } vypis&&printf("%s\n > %d:%c - <%s>%c<%s>%c<%s>, %s\n",s,i,s[i],s0,op0,s1,op1,s2,ops); /* 0. */ if (strlen(ops)==0) { s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); strccat(s,op1); strcat(s,s2); cont=1; break; } /* 1. */ if ((op0==' ')&&(op1==' ')) { strcpy(s,s1); cont=1; break; } /* 2,3. */ if (op0=='+') { if ((op1=='+') || (op1=='-') || (op1==' ')) { s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); if (op1!=' ') strccat(s,op1); strcat(s,s2); vypis&&printf("%s.\n",s); cont=1; break; } } /* 4. */ if ((op0=='-') && (notin(ops,"+-"))) { s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); strccat(s,op1); strcat(s,s2); cont=1; break; } /* 5. */ if ((op0=='*') && (notin(ops,"+-"))) { s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); strccat(s,op1); strcat(s,s2); cont=1; break; } /* 6. */ if (op0==' ') { switch (op1) { case '+': case '-': s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); strccat(s,op1); strcat(s,s2); cont=1; break; case '*': case '/': if (notin(ops,"+-")) { s[0]=0; strcat(s,s0); strccat(s,op0); strcat(s,s1); strccat(s,op1); strcat(s,s2); cont=1; } break; } } /* if 6 */ } } /* for */ } while (cont==1); printf("%s\n",s); } return 0; }