Untitled
unknown
c_cpp
2 years ago
2.1 kB
3
Indexable
#include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 501 struct Stack { char arr[SIZE]; int topIndex; }; struct Stack* initStack() { struct Stack *new_stack = (struct Stack*)malloc(sizeof(struct Stack)); new_stack->topIndex = -1; return new_stack; } char pop(struct Stack *stack) { int ind = stack->topIndex; if (ind == -1) return 0; char elem = stack->arr[ind]; (stack->topIndex)--; return elem; } char top(struct Stack *stack) { int ind = stack->topIndex; if (ind == -1) return 0; return stack->arr[ind]; } void push(struct Stack *stack, char value) { int ind = ++(stack->topIndex); stack->arr[ind] = value; } int isEmpty(struct Stack *stack) { if (stack->topIndex == -1) return 1; return 0; } int count(struct Stack *stack) { return stack->topIndex + 1; } int main() { struct Stack *sym_stack = initStack(); char input_str[SIZE]; char prev_brack; fgets(input_str, SIZE, stdin); for (int i = 0; input_str[i]; i++) { char cur_sym = input_str[i]; if (cur_sym == '(' || cur_sym == '{' || cur_sym == '[' || cur_sym == '<') { push(sym_stack, cur_sym); } else if (cur_sym == ')' || cur_sym == '}' || cur_sym == ']' || cur_sym == '>') { prev_brack = pop(sym_stack); if (prev_brack) { int first_case = cur_sym == ')' && prev_brack == '('; int sec_case = cur_sym == '}' && prev_brack == '{'; int third_case = cur_sym == ']' && prev_brack == '['; int fourth_case = cur_sym == '>' && prev_brack == '<'; if (!(first_case || sec_case || third_case || fourth_case)) { printf("wrong"); return 0; } } else { printf("wrong"); return 0; } } } if (isEmpty(sym_stack)) { printf("correct"); } else { printf("wrong"); } return 0; }
Editor is loading...