#include #include #define MAX_LENGTH 100 int isMatchingPair(char open, char close) { return (open == '(' && close == ')') || (open == '{' && close == '}') || (open == '[' && close == ']') || (open == '<' && close == '>'); } int main() { char input[MAX_LENGTH]; fgets(input, sizeof(input), stdin); int len = strlen(input); if (input[len - 1] == '\n') { input[len - 1] = '\0'; len--; } printf("Read: %s\n", input); char stack[MAX_LENGTH]; int top = -1; for (int i = 0; i < len; i++) { char ch = input[i]; if (ch == '(' || ch == '{' || ch == '[' || ch == '<') { stack[++top] = ch; } else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') { if (top == -1) { printf("Unexpected closing bracket %c in %d\n", ch, i); return 0; } else if (!isMatchingPair(stack[top], ch)) { printf("Crossed bracket %c in %d, expected %c\n", ch, i, (stack[top] == '(' ? ')' : stack[top] == '{' ? '}' : stack[top] == '[' ? ']' : '>')); return 0; } top--; } } if (top != -1) { memset(input, 0, len); sprintf(input,"Missing closing brackets: "); len = strlen(input); for (int i = top; i >= 0; i--) { input[len++] = (stack[i] == '(' ? ')' : stack[i] == '{' ? '}' : stack[i] == '[' ? ']' : '>'); } input[len] = 0; printf("%s\n", input); return 0; } printf("All brackets OK\n"); return 0; }