华为机试之括号匹配
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);
}
}
#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);
}
}
相关文章推荐
- 华为机试—括号匹配判断[去多余括号]
- 华为的一道括号匹配题目
- 华为机试——括号匹配
- 华为OJ:2199 判断输入字符串中的括号匹配
- 华为-成研所笔试-java-括号匹配
- 华为笔试题--LISP括号匹配 解析及源码实现
- 华为机试之括号匹配
- 2017年华为优招机试题_括号匹配_编程题
- 华为机试练习---括号匹配问题
- 华为笔试题--LISP括号匹配 解析及源码实现
- 华为机试—括号匹配
- 华为2014机考题_判断if括号是否匹配_堆栈
- 华为机试题二括号的匹配
- OJ——华为编程题目:输入字符串括号是否匹配
- 华为2014机考题目_判断if括号匹配是否合法_堆栈_简单的方法- -
- 华为机试 - 判断if语句括号是否匹配
- 括号匹配问题
- Java程序练习-括号匹配
- 括号最大匹配(区间dp)
- UVa673(括号匹配)