#include #include #define MAX_LEN 100 int isOpening(char c){ return (c == '(' || c == '[' || c == '{' || c == '<'); } int isClosing(char c){ return (c == ')' || c == ']' || c == '}' || c == '>'); } char expectedClosing(char c){ switch (c) { case '(': return ')'; case '[': return ']'; case '{': return '}'; case '<': return '>'; default: return '?'; } } char expectedOpening(char c){ switch (c) { case ')': return '('; case ']': return '['; case '}': return '{'; case '>': return '<'; default: return '?'; } } int main(){ char code[MAX_LEN + 1]; char stack[MAX_LEN]; int top = -1; if (!fgets(code, sizeof(code), stdin)){ printf("Input error\n"); return 1; } code[strcspn(code, "\n")] = '\0'; printf("Read: %s\n", code); int len = strlen(code); for (int i = 0; i < len; i++){ char c = code[i]; if (isOpening(c)){ if (top < MAX_LEN - 1){ stack[++top] = c; } } else if (isClosing(c)){ if (top < 0){ printf("Unexpected closing bracket %c in %d\n", c, i); return 0; } char last = stack[top--]; if (expectedClosing(last) != c){ printf("Crossed bracket %c in %d, expected %c \n", c, i, expectedClosing(last)); return 0; } } } if (top >= 0){ printf("Missing closing brackets: "); while (top >= 0) { printf("%c", expectedClosing(stack[top--])); } printf("\n"); } else { printf("All brackets OK\n"); } return 0; }