#include #include #include #include #include #include struct stack{ char data[100]; int size; }s; void push(char ch){ if(s.size < 100){ s.size++; s.data[s.size] = ch; } else exit(0); } char pop(){ if(s.size > 0){ s.size--; return (s.data[s.size]); } else exit(0); } bool find_pair(char a, char b){ if(a == '(' && b == ')') return true; if(a == '{' && b == '}') return true; if(a == '<' && b == '>') return true; if(a == '[' && b == ']') return true; return false; } char right_pair(char a){ char b; if(a == '(') b = ')'; if(a == '{') b = '}'; if(a == '[') b = ']'; if(a == '<') b = '>'; return b; } char gettop(){ return s.data[s.size]; } int main(){ char line[100]; s.size = -1; printf("Read: "); char *x = fgets(line, 100, stdin); printf("%s", line); int l = strlen(line); int i, j = 0; char *a = calloc(l, sizeof(char)); char *b = calloc(l, sizeof(char)); for(i = 0; i < l; i++){ //a[i] = gettop(); // b[i] = right_pair(a[i]); if(line[i] == '{' || line[i] == '(' || line[i] == '[' || line[i] == '<'){ push(line[i]); a[j] = gettop(); b[j] = right_pair(a[j]); j++; //printf("%c", b[i]); } if(line[i] == '}' || line[i] == ')' || line[i] == ']' || line[i] == '>'){ //a[i] = gettop(); //b[i] = right_pair(a[i]); if(s.size == -1){ printf("Unexpected closing bracket %c in %d\n", line[i], i); return 0; } else if(!find_pair(gettop(), line[i])){ printf("Crossed bracket %c in %d, expected %c\n", line[i], i, b); return 0; } else{ pop(); } } } i = 0; if(s.size == -1){ printf("All brackets OK\n"); } else { printf("Missing closing brackets: %s \n", b); } free(a); free(b); return 0; }