括號匹配-注意某些邊界處理

#include "stdio.h"
#include "malloc.h"
#include "process.h"
#include "conio.h"
#define N 100
typedef struct
{
    char *base;
    char *top;
}Stack;
int Isleft(char ch)
{
    return (ch == '(' || ch == '{' || ch == '[')?1:0;
}
int Isright(char ch)
{
    return (ch == ')' || ch == '}' || ch == ']')?1:0;
}
int Match(char a,char b)
{
    return ((a == '(' && b == ')') || (a == '[' && b == ']') || (a == '{' && b == '}'))?1:0;
}
void main()
{
    Stack s;
    char  str[N];
    int i = 0;
    s.base = (char*)malloc(N*sizeof(char));
    s.top  = s.base;
    str[i] = getch();
    while(str[i] != 13)//是13(回車)不是10(換行)
    {
        if(Isleft(str[i]) || Isright(str[i]))
        {
            printf("%c",str[i]);
            if(Isleft(str[i]))
            {
                *s.top++ = str[i];
            }
            if(Isright(str[i]))
            {
                if(!Match(*--s.top,str[i]))
                {
                    printf("\ncan not match\n");
                    exit(0);
                }
            }
        }
        str[++i] = getch();
    }
    if(s.top == s.base)
        printf("nmatch\n");
}
相關文章
相關標籤/搜索