【数据结构-C语言】从键盘输入一个仅包括( 、)、[ 、] 、{ 、} 共 6种字符的括号串,使用栈检查其合法性。

从键盘输入一个仅包括( 、)、[ 、] 、{ 、} 共 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"); 
}

如果有什么问题和疑问,欢迎在评论区留言哦~

发布了33 篇原创文章 · 获赞 7 · 访问量 4560

猜你喜欢

转载自blog.csdn.net/qq_45239614/article/details/102648696
今日推荐