您的位置:首页 > 其它

华为机试之括号匹配

2014-08-15 17:17 204 查看
//验证括号是否匹配 运行正确



#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAXLEN 50

typedef struct stack

{

char ch[50];

int top;

}ST;

//栈的初始化

ST *ST_Init()

{

ST *st;

if (st=(ST *)malloc(sizeof(ST)))

{

st->top=0;

return st;

}

return NULL;

}

//出栈操作

int ST_Pop(ST *st)

{

if (st->top==0)

{

printf("栈为空\n");

return 0;

}

st->top--;

return st->ch[st->top];

}



//入栈操作

void st_Push(ST *st,char c)

{

if (st->top==MAXLEN)

{

printf("栈溢出\n");

return ;

}

st->ch[st->top]=c;

st->top++;

}

//符号检验函数

void check_symbol(ST *st,char *a)

{

int i;

if (a[0]==']'||a[0]==')')

{

printf("输入的符号已经不可能匹配\n");

return ;

}

else if (a[0]=='('||a[0]=='[')

st_Push(st,a[0]);





for (i=1;i<strlen(a);i++)

{

if ((a[i]==')'&&st->ch[st->top-1]=='(')||(a[i]==']'&&st->ch[st->top-1]=='['))

ST_Pop(st);

else if (a[i]=='['||a[i]==']'||a[i]=='('||a[i]==')')

st_Push(st,a[i]);

}





if(st->top==0)

{

printf("括号是匹配的\n\n");

}

else



{

printf("括号不匹配\n\n");

}

}



void main()

{



while (1)

{

char s[50];

ST *st;

st=ST_Init();

printf("请输入一串括号:\n");

scanf("%s",s);

if(s[0]=='E')

return;

check_symbol(st,s);

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: