Aktualizovat a1/program.c

This commit is contained in:
Mykola Syniavskyi 2025-10-24 01:53:29 +00:00
parent a1779530b2
commit b800283ce0

View File

@ -0,0 +1,64 @@
#include <stdio.h>
#include <string.h>
#define MAX_LEN 101
int open(char a) {
return (a=='('|| a=='[' || a=='{' || a=='<');
}
int close(char a) {
return (a==')'|| a==']' || a=='}' || a=='>');
}
char matching(char a) {
switch (a) {
case ')': return '(';
case ']': return '[';
case '}': return '{';
case '>': return '<';
case '(': return ')';
case '[': return ']';
case '{': return '}';
case '<': return '>';
default: return 0;
}
}
int main() {
char line[MAX_LEN];
if (!fgets(line, sizeof(line), stdin))
return 0;
line[strcspn(line, "\n")] = 0;
printf("Read: %s\n", line);
char stack[MAX_LEN-1];
int verh =-1;
for (int i=0; line[i]; i++) {
char a=line[i];
if (open(a)) {
if (verh < MAX_LEN-2){
stack[++verh] =a;}
} else if (close(a)) {
if (verh == -1) {
printf("Unexpected closing bracket %c in %d\n", a, i);
return 0;
}
if (stack[verh] != matching(a)) {
printf("Crossed bracket %c in %d, expected %c\n", a, i, matching(stack[verh]));
return 0;
}
verh--;
}
}
if (verh !=-1) {
printf("Unclosed bracket %c at end, expected %c\n",
stack[verh], matching(stack[verh]));
return 0;
}
printf("All brackets OK\n");
return 0;
}