c言語でカッコマッチングアルゴリズムを実現


/*      */
#include<stdio.h>
#define FALSE 0
#define TRUE 1
#define MAXSIZE 100
typedef char DataType;
//   
typedef struct stack{
    DataType data[MAXSIZE];
    int top;
}SeqStack;
//    
void InitStack(SeqStack *s)
{
    s->top = -1;
}
//       
int IsEmpty(SeqStack *s)
{
    if(s->top == -1)
        return TRUE;
    return FALSE;
}
//       
int IsFull(SeqStack *s)
{
    if(s->top == MAXSIZE-1)
        return TRUE;
    return FALSE;
}
//  
void PopStack(SeqStack *s, DataType temp)
{
    if(IsEmpty(s))
        return;
    temp = s->data[s->top];
    s->top --;
}
//  
void PushStack(SeqStack *s,DataType temp)
{
    if(IsFull(s))
        return;
    s->top ++ ;
    s->data[s->top]=temp;
}
//          
int Match(char chone,char chtwo)
{
    if(chone=='(' && chtwo==')')
        return TRUE;
    else if(chone == '{' && chtwo == '}')
        return TRUE;
    else if(chone == '[' && chtwo == ']')
        return TRUE;
    else
        return FALSE;
}
//     
void GetTopStack(SeqStack *s , DataType *temp)
{
    if(IsEmpty(s))
        return;
    *temp = s->data[s->top];
}
void BracketMatch(char *str)
{
    SeqStack s;
    int i;
    char ch;
    InitStack(&s);
    for(i=0 ; str[i]!='\0';i++ )
    {
        switch(str[i]){
        case '(':
        case '[':
        case '{':
            PushStack(&s,str[i]);
            break;
        case ')':
        case ']':
        case '}':
            if(IsEmpty(&s))
            {
                printf("     
"); return; }else{ GetTopStack(&s,&ch); if(Match(ch,str[i])) PopStack(&s,ch); else{ printf("

"); return; }/*if*/ }/*else*/ }/*for*/ }/*switch*/ if(IsEmpty(&s)) printf("

"); else printf("

"); } int main() { char str[MAXSIZE]; int i; printf("Input the bracket string:
"); scanf("%s",str); BracketMatch(str); return 1; }