usaa24/a1/program.c
2024-10-29 14:49:40 +01:00

70 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
// Функция для проверки пары скобок
int is_matching_pair(char open, char close) {
return (open == '(' && close == ')') ||
(open == '{' && close == '}') ||
(open == '[' && close == ']') ||
(open == '<' && close == '>');
}
// Основная функция для проверки строки со скобками
void check_brackets(const char *code) {
char stack[MAX_LEN];
int positions[MAX_LEN];
int top = -1; // Инициализация стека как пустого
printf("Read: %s\n", code);
for (int i = 0; i < strlen(code); i++) {
char ch = code[i];
// Если символ — открывающая скобка, добавляем в стек
if (ch == '(' || ch == '{' || ch == '[' || ch == '<') {
if (top < MAX_LEN - 1) {
stack[++top] = ch;
positions[top] = i;
} else {
printf("Stack overflow at position %d\n", i);
return;
}
}
// Если символ — закрывающая скобка
else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') {
if (top == -1) {
printf("Unmatched closing bracket %c at position %d\n", ch, i);
return;
}
if (!is_matching_pair(stack[top], ch)) {
printf("Crossed bracket %c in %d, expected %c\n", ch, i,
stack[top] == '(' ? ')' :
stack[top] == '{' ? '}' :
stack[top] == '[' ? ']' : '>');
return;
}
top--; // Убираем из стека совпавшую пару
}
}
// Проверяем оставшиеся незакрытые скобки
if (top != -1) {
printf("Unmatched opening bracket %c at position %d, expected %c\n",
stack[top], positions[top],
stack[top] == '(' ? ')' :
stack[top] == '{' ? '}' :
stack[top] == '[' ? ']' : '>');
} else {
printf("All brackets OK\n");
}
}
int main() {
// Примеры для проверки
check_brackets("{[<(asdf)>]}");
check_brackets("<dsfsda(asdf>)");
return 0;
}