From 41305a912aaba3672a23837f172505b7d4c04d43 Mon Sep 17 00:00:00 2001 From: Oleksandr Hryshchenko Date: Mon, 29 Nov 2021 18:09:50 +0000 Subject: [PATCH] a2 --- a2/program.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/a2/program.c b/a2/program.c index e41e18c..cc00790 100644 --- a/a2/program.c +++ b/a2/program.c @@ -1,7 +1,85 @@ -#include +#include "stdio.h" +#include "string.h" -int main(){ - printf ("Hello world\n"); - return 0; +struct Stack { + char symbol[100]; + int size; +}; + +void pushStack(struct Stack* stack, char symbol){ + stack->symbol[stack->size] = symbol; + stack->size++; } +float popStack(struct Stack* stack){ + char c = stack->symbol[stack->size -1]; + stack->size -= 1; + return c; +} + +int main(){ + + char string[50]; //0 - 49 + char BB[50]; //0 - 49 + + struct Stack stack; + memset(&stack, 0, sizeof(struct Stack)); + + int x = 0; + + scanf("%[^\n]", string); + + strcpy(BB, string); + int i = 0; + + while (1){ + + if( BB[i] == '[' || BB[i] == '(' || BB[i] == '{' || BB[i] == '<'){ + + pushStack(&stack, BB[i]); + BB[i] = ' '; + x++; + } + + if( BB[i] == ']' || BB[i] == ')' || BB[i] == '}' || BB[i] == '>'){ + if (x == 0){ + printf ("Read: %s\nUnexpected closing bracket %c in %d\n",string, BB[i], i); + return 0; + } + + char c = popStack(&stack); + if (c =='('){ + c--; + } + + if (c+2 != BB[i]){ + printf("Read: %s\nCrossed bracket %c in %d, expected %c \n", string, BB[i], i, c+2); + return 0; + } + } + + i++; + if (i == strlen(string)) break; + } + + if (stack.size > 0){ + + printf("Read: %s\nMissing closing brackets: ", string); + while (stack.size > 0){ + char c = popStack(&stack); + if (c =='('){ + c--; + } + printf("%c", c+2); + } + printf("\n"); + + return 0; + } + + printf("Read: %s\nAll brackets OK\n", string); + + + + return 0; +} \ No newline at end of file