#include #include #include #define MAX_LEN 100 char pairs[][2] = { {'(', ')'}, {'[', ']'}, {'{', '}'}, {'<', '>'} }; int is_open(char c) { for (int i = 0; i < 4; i++) if (pairs[i][0] == c) return 1; return 0; } int is_close(char c) { for (int i = 0; i < 4; i++) if (pairs[i][1] == c) return 1; return 0; } char match(char c) { for (int i = 0; i < 4; i++) if (pairs[i][0] == c) return pairs[i][1]; return '?'; } int main(void) { char code[MAX_LEN + 2]; char stack[MAX_LEN]; int top = -1; if (fgets(code, sizeof(code), stdin) == NULL) return 0; code[strcspn(code, "\n")] = '\0'; printf("Read: %s\n", code); for (int i = 0; code[i] != '\0'; i++) { char c = code[i]; if (is_open(c)) { if (top < MAX_LEN - 1) stack[++top] = c; } else if (is_close(c)) { if (top < 0) { printf("Unexpected closing bracket %c in %d\n", c, i); return 0; } char last = stack[top--]; if (match(last) != c) (void)(printf("Crossed bracket %c in %d, expected %c \n", c, i , match(last)), exit(0)); } } (top >= 0) ? (printf("Missing closing brackets: "), ({ for (int i = top; i >= 0; i--) printf("%c", match(stack[i])); }), printf("\n")) : printf("All brackets OK\n"); return 0; }