从键盘输入一个仅包括( 、)、[ 、] 、{ 、} 共 6种字符的括号串,使用栈检查其合法性。如:[]{} 、[{()}]合法;[]({} 、 {[}] 非法。
算法思想:
输入一串括号字符串,如果是字符是’(’、’[’、’{‘就进行入栈操作。如果字符是’)’、’]’、’}‘就对栈顶元素进行出栈操作,并对栈顶元素进行检查括号是否匹配
的操作,比如字符为’(’,那么栈顶元素就要出栈,并检查其是否为’)’,如果是,那么括号匹配则合法。
#include <stdio.h>
#include <string.h>
struct stack { //定义一个栈
char strstack[1000];
int top; //栈顶
};
void initstack(stack &s) //栈的初始化
{
s.top=-1;
}
void push(stack &s,char str) //入栈操作
{
if (999==s.top)
{
printf("栈满,不能进行入栈操作!\n");
return ;
}
s.top++;
s.strstack[s.top]=str;
}
char pop(stack &s) //出栈操作
{
if(-1==s.top)
{
printf("栈空,不能进行出栈操作!\n");
return 0;
}
char a=s.strstack[s.top];
s.top--;
return a;
}
int check(char *str) //检测括号合法性
{ int i;
stack s;
initstack(s);
int e=strlen(str);
for(i=0;i<e;i++)
{
char kh=str[i];
switch(kh)
{
case '(':
case '[':
case '{':
push(s,kh);
break;
case ')':
if (pop(s)!='(')
return 0;
break;
case ']':
if (pop(s)!='[')
return 0;
break;
case '}':
if(pop(s)!='{')
return 0;
break;
}
if (-1==s.top) //检查栈里是否还有未出栈的元素
return 1;
else
return 0;
}
return 0;
}
int main()
{
char str[50];
int a;
printf("请输入一串括号字符串:");scanf("%s",str);
a=check(str);
if (1==a)
printf("括号合法。\n");
else
printf("括号非法。\n");
}
如果有什么问题和疑问,欢迎在评论区留言哦~