#include #include #include bool brackets(const char *code) { int stack[100]; int top = -1; for (int i = 0; code[i] != '\0'; i++) { if (code[i] == '(' || code[i] == '[' || code[i] == '{' || code[i] == '<') { stack[++top] = i; } else if (code[i] == ')' || code[i] == ']' || code[i] == '}' || code[i] == '>') { if (top == -1) { printf("Unexpected closing bracket %c in %d\n", code[i], i); return false; } int opening = stack[top--]; char expected_opening = 0; if (code[i] == ')') { expected_opening = '('; } else if (code[i] == ']') { expected_opening = '['; } else if (code[i] == '}') { expected_opening = '{'; } else if (code[i] == '>') { expected_opening = '<'; } if (code[opening] != expected_opening) { printf("Crossed bracket %c in %d, expected %c\n", code[i], i, expected_opening); return false; } } } while (top >= 0) { int opening = stack[top--]; char unclosed = code[opening]; char expected_closing = 0; if (unclosed == '(') { expected_closing = ')'; } else if (unclosed == '[') { expected_closing = ']'; } else if (unclosed == '{') { expected_closing = '}'; } else if (unclosed == '<') { expected_closing = '>'; } if (top == -1) { printf("Missing closing brackets: %c\n", expected_closing); return false; } } return top == -1; } int main() { char code[100]; fgets(code, sizeof(code), stdin); if (code[strlen(code) - 1] == '\n') { code[strlen(code) - 1] = '\0'; } printf("Read: %s\n", code); if (brackets(code)) { printf("All brackets OK\n"); } return 0; }