68 lines
1.5 KiB
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;
|
|
}
|
|
|