现在的位置: 首页 > 综合 > 正文

括号匹配……

2013年10月02日 ⁄ 综合 ⁄ 共 1377字 ⁄ 字号 评论关闭

问题连接……

#include<stdio.h>  
#include<conio.h>  
 void main()  
 {  
    char a[50],b[50];  
    int i,j,flag;  
    flag=i=j=0;  
    gets(a);  
    for(i=0;a[i]!='\0';i++)  
    {         
        if(a[i]=='(')  
			b[j++]=1;				
        if(a[i]==')')		
			if(b[--j]!=1)
			{
				flag=1;
				break;
			}		
        if(a[i]=='[')  
			b[j++]=2;
        if(a[i]==']')  
			if(b[--j]!=2)
			{
				flag=1;
				break;
			}
        if(a[i]=='{') 
			b[j++]=3;
        if(a[i]=='}')
			if(b[--j]!=3)
			{
				flag=1;
				break;
			}
    }  
    if(flag==0)  
        printf("\nYES\n");        
    if(flag==1)  
        printf("\nNO\n");     
    getch();  
 }  

栈方法……

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define Stack_Size 100
#define ElemType char

typedef struct Stack
{
    ElemType base[Stack_Size];
    int top;
}SqStack;

int InitStack(SqStack *S)/* 初始化栈 */
{
     S->top=-1;
    return OK;
}

int Push(SqStack *S,ElemType e)/* 进栈操作 */
{
    if(S->top>=Stack_Size-1)
        return ERROR;
    S->top++;
    S->base[S->top]=e;
    return OK;
}

int Pop(SqStack *S)/* 出栈操作 */
{
    if(S->top==-1)
        return ERROR;
    S->top--;
    return OK;
}

char convert(ElemType e)/* 如果左括号则转换成右返回 */
{
    if(e=='{')
        e='}';
    if(e=='[')
        e=']';
    if(e=='(')
        e=')';
    return e;

}

int Check(SqStack *S,ElemType *p)/* 检查匹配括号函数 */
{
     while(*p!='\0')
    {
        if(*p=='{'||*p=='['||*p=='(')/* 如果是左括号则转换成右括号存入栈中 */
            if(Push(S,convert(*p))==0)
                return ERROR;
        if(*p=='}'||*p==']'||*p==')')/* 如果是右括号且与最近存入栈中的括号相同则出栈一个元素,不同则不匹配。不是右括号则继续检查匹配 */
        {
            if(*p==S->base[S->top])
            {
                if(Pop(S)==0)
                    return ERROR;
            }
            else
                return ERROR;

        }
        p++;        
    }
    if(S->top==-1)/* 如果S->top==-1则表示所有括号匹配完,即完全匹配。否则,还有未匹配完的 */
        return OK;
    else
        return ERROR;
}

void main()
{
    SqStack S;
    char p[50];
    InitStack(&S);
    scanf("%s",p);
    if(Check(&S,p)==0)
        printf("\nmismatch\n");
    else 
        printf("\nmatched\n");
}

抱歉!评论已关闭.