728x90
728x170
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | // 괄호 검사 프로그램 #include <stdio.h> #include <string.h> #define TRUE 1 #define FALSE 0 #define MAX_STACK_SIZE 100 typedef char element; typedef struct { element stack[MAX_STACK_SIZE]; int top; } StackType; // 스택 초기화 함수 void init(StackType *s) { s->top = -1; } // 공백 상태 검출 함수 int is_empty(StackType *s) { return (s->top == -1); } int is_full(StackType *s) { return (s->top == (MAX_STACK_SIZE - 1)); } // 삽입 함수 void push(StackType *s, element item) { if (is_full(s)) { fprintf(stderr, "스택 포화 에러\n"); return; } else s->stack[++(s->top)] = item; } // 삭제 함수 element pop(StackType *s) { if (is_empty(s)) { fprintf(stderr, "스택 공백 에러\n"); exit(1); } else return s->stack[(s->top)--]; } // 피크 함수 element peek(StackType *s) { if (is_empty(s)) { fprintf(stderr, "스택 공백 에러\n"); exit(1); } else return s->stack[s->top]; } int check_matching(char *in) { StackType s; char ch, open_ch; int i, n = strlen(in); // n = 문자열의 길이 init(&s); // 스택의 초기화 for (i = 0; i < n; i++) { ch = in[i]; // ch = 다음 문자 switch (ch) { case '(' : case '[': case '{': push(&s, ch); break; case ')': case ']': case '}': if (is_empty(&s)) { return FALSE; } else { open_ch = pop(&s); if ((open_ch == '(' && ch != ')') || (open_ch == '[' && ch != ']') || (open_ch == '{' && ch != '}')) { return FALSE; } break; } } } if (!is_empty(&s)) return FALSE; // 스택에 남아 있으면 오류 return TRUE; } // 주 함수 int main() { if (check_matching("{ A[(i+1)]=0; }") == TRUE) { // 0 : FALSE, 1 : TRUE printf("괄호 검사 성공\n"); } else { printf("괄호 검사 실패\n"); } } | cs |
728x90
그리드형(광고전용)
'Source Code > C' 카테고리의 다른 글
원형 큐 (Circular Queue) 예 (0) | 2017.05.31 |
---|---|
중위 표기 수식을 전위 표기 수식으로 변환하는 프로그램 (0) | 2017.05.31 |
중위 표기 수식을 후위 표기 수식으로 변환하는 프로그램 (0) | 2017.05.16 |
후위 표기식 계산 프로그램 (5) | 2017.05.16 |
연결 리스트로 구현된 리스트 ADT 테스트 프로그램 (0) | 2017.05.08 |
이중 연결 리스트의 다항식 프로그램 (0) | 2017.05.08 |
별 찍기 (Asterisk Decoration) in C (0) | 2017.05.03 |
Multiplication Tables (9X9, 18X18) in C (0) | 2017.04.26 |