#include #include #define MAX_LEN 100 typedef struct { char bracket; int position; } StackItem; int main() { char line[MAX_LEN + 1]; StackItem stack[MAX_LEN]; int top = -1; fgets(line, sizeof(line), stdin); printf("Read: %s", line); for (int i = 0; line[i] != '\0'; i++) { char ch = line[i]; if (ch == '(' || ch == '{' || ch == '[' || ch == '<') { if (top < MAX_LEN - 1) { stack[++top].bracket = ch; stack[top].position = i; } } else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') { if (top == -1) { return 0; } char opening = stack[top].bracket; int opening_pos = stack[top].position; top--; if ((opening == '(' && ch != ')') || (opening == '{' && ch != '}') || (opening == '[' && ch != ']') || (opening == '<' && ch != '>')) { char expected; switch (opening) { case '(': expected = ')'; break; case '{': expected = '}'; break; case '[': expected = ']'; break; case '<': expected = '>'; break; } printf("Crossed bracket %c in %d, expected %c\n", ch, i, expected); return 0; } } } if (top != -1) { printf("Unmatched opening bracket %c at position %d\n", stack[top].bracket, stack[top].position); } else { printf("All brackets OK\n"); } return 0; }