#include #include #define MAX_LEN 100 // Стек для хранения открывающих скобок char stack[MAX_LEN]; int top = -1; // Функция для добавления элемента в стек void push(char c) { if (top < MAX_LEN - 1) { stack[++top] = c; } } // Функция для извлечения элемента из стека char pop() { if (top >= 0) { return stack[top--]; } return '\0'; // Если стек пустой } // Функция для получения соответствующей закрывающей скобки char matchingCloseBracket(char open) { if (open == '(') return ')'; if (open == '{') return '}'; if (open == '[') return ']'; if (open == '<') return '>'; return '\0'; } // Функция для проверки соответствия скобок int isMatchingPair(char open, char close) { return (open == '(' && close == ')') || (open == '{' && close == '}') || (open == '[' && close == ']') || (open == '<' && close == '>'); } int main() { char code[MAX_LEN]; fgets(code, MAX_LEN, stdin); // Убираем лишний символ новой строки, если он есть code[strcspn(code, "\n")] = 0; printf("Read: %s\n", code); // Дополнительный массив для хранения индексов открывающих скобок int indexStack[MAX_LEN]; int indexTop = -1; for (int i = 0; i < strlen(code); i++) { char c = code[i]; if (c == '(' || c == '{' || c == '[' || c == '<') { push(c); indexStack[++indexTop] = i; // Сохраняем индекс открывающей скобки } else if (c == ')' || c == '}' || c == ']' || c == '>') { if (top == -1) { // Закрывающая скобка без соответствующей открывающей printf("Unexpected closing bracket %c in %d\n", c, i); return 1; // Возвращаем 1 при ошибке } char lastOpen = pop(); int lastIndex = indexStack[indexTop--]; // Извлекаем индекс соответствующей открывающей скобки if (!isMatchingPair(lastOpen, c)) { // Здесь нужно использовать lastIndex + 1, чтобы он соответствовал формату вывода printf("Crossed bracket %c in %d, expected %c\n", c, i + 1, matchingCloseBracket(lastOpen)); return 1; // Возвращаем 1 при ошибке } } } // Проверка на незакрытые скобки if (top != -1) { printf("Missing closing brackets: "); for (int i = top; i >= 0; i--) { printf("%c", matchingCloseBracket(stack[i])); } printf("\n"); return 1; // Возвращаем 1 при ошибке } printf("All brackets OK\n"); return 0; // Возвращаем 0 при успехе }