Aktualizovat a1/program.c
This commit is contained in:
parent
a1779530b2
commit
b800283ce0
64
a1/program.c
64
a1/program.c
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user