usaa25/a1/program.c

68 lines
1.5 KiB
C

#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("Missing closing brackets: ");
for (int j = verh; j >= 0; j--) {
printf("%c", matching(stack[j]));
}
printf("\n");
return 0;
}
printf("All brackets OK\n");
return 0;
}