usaa25/a1/program.c
2025-10-19 08:28:24 +02:00

82 lines
1.4 KiB
C

#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int isOpening(char c){
return (c == '(' || c == '[' || c == '{' || c == '<');
}
int isClosing(char c){
return (c == ')' || c == ']' || c == '}' || c == '>');
}
char expectedClosing(char c){
switch (c) {
case '(': return ')';
case '[': return ']';
case '{': return '}';
case '<': return '>';
default: return '?';
}
}
char expectedOpening(char c){
switch (c) {
case ')': return '(';
case ']': return '[';
case '}': return '{';
case '>': return '<';
default: return '?';
}
}
int main(){
char code[MAX_LEN + 1];
char stack[MAX_LEN];
int top = -1;
if (!fgets(code, sizeof(code), stdin)){
printf("Input error\n");
return 1;
}
code[strcspn(code, "\n")] = '\0';
printf("Read: %s\n", code);
int len = strlen(code);
for (int i = 0; i < len; i++){
char c = code[i];
if (isOpening(c)){
if (top < MAX_LEN - 1){
stack[++top] = c;
}
}
else if (isClosing(c)){
if (top < 0){
printf("Unexpected closing bracket %c in %d\n", c, i);
return 0;
}
char last = stack[top--];
if (expectedClosing(last) != c){
printf("Crossed bracket %c in %d, expected %c \n", c, i, expectedClosing(last));
return 0;
}
}
}
if (top >= 0){
printf("Missing closing brackets: ");
while (top >= 0) {
printf("%c", expectedClosing(stack[top--]));
}
printf("\n");
} else {
printf("All brackets OK\n");
}
return 0;
}