返回顶部

收藏

c利用栈实现括号匹配的检验

更多
#include <stdlib.h>  
#include <stdio.h>  
#define STACK_SIZE  100  

typedef struct{  
     char *base;  
     char *top;  
     int stacksize;  
 }SqStack;  

int  InitStack(SqStack &s)  
 {  
     s.base=(char *)malloc(STACK_SIZE*sizeof(char));  
     if(s.base==NULL)  
        return 0;  
     s.top=s.base;  
     s.stacksize=STACK_SIZE;  
     return 0;  
 }   

int Push(SqStack &s,char c)  
{  
    if(s.top-s.base>=s.stacksize){  
        s.base=(char *)realloc(s.base,(s.stacksize+100)*sizeof(char));  
    }  
    if(s.base==NULL)  
        return 1;  
    *s.top++=c;  
    return 0;  
 }  

int Pop(SqStack &s,char &c)  
{  
     if(s.top==s.base)  
         return 1;  
     c=*--s.top;  
     return 0;  
}  

 void main(void)  
 {  
     SqStack s;  

     InitStack(s);  
     int i;
     char *pc="([]()[])";
     char *pcx=pc;  
     char c;  
     for(i=0;pcx[i]!=0;i++)
     {
         if(pcx[i]=='('||pcx[i]=='[')  
         {
             Push(s,pcx[i]);  
             if(pcx[i+1]==NULL)
             {
                 printf("括号不匹配");  
                 return;  
             }
         }
         else
         {
            Pop(s,c);
            c=c=='('?')':']';
            if(c!=pcx[i])
            {
                 printf("括号不匹配");  
                 return; 
            }
         } 
    }
     printf("括号匹配");  
 }
//该片段来自于http://outofmemory.cn

标签:c++,基础

收藏

0人收藏

支持

0

反对

0

发表评论