#include #include #define MAX_LEN 101 int open(char a) { return (a=='('|| a=='[' || a=='{' || a=='<'); } int close(char a) { return (a==')'|| a==']' || a=='}' || a=='>'); } char matching(char a) { switch (a) { case ')': return '('; case ']': return '['; case '}': return '{'; case '>': return '<'; case '(': return ')'; case '[': return ']'; case '{': return '}'; case '<': return '>'; default: return 0; } } int main() { char line[MAX_LEN]; if (!fgets(line, sizeof(line), stdin)) return 0; line[strcspn(line, "\n")] = 0; printf("Read: %s\n", line); char stack[MAX_LEN-1]; int verh =-1; for (int i=0; line[i]; i++) { char a=line[i]; if (open(a)) { if (verh < MAX_LEN-2){ stack[++verh] =a;} } else if (close(a)) { if (verh == -1) { printf("Unexpected closing bracket %c in %d\n", a, i); return 0; } if (stack[verh] != matching(a)) { printf("Crossed bracket %c in %d, expected %c \n", a, i, matching(stack[verh])); return 0; } verh--; } } if (verh != -1) { printf("Missing closing brackets: "); for (int j = verh; j >= 0; j--) { printf("%c", matching(stack[j])); } printf("\n"); return 0; } printf("All brackets OK\n"); return 0; }