栈的应用之括号匹配问题

给一个字符串,那这个程序是可以检测你的字符串中所含的括号是否匹配。

原理是:我们从左向右遍历字符串,如果我们遇到左括号如‘(’,我们就将这个左括号进栈,如遇到右括号‘(’,我们就将栈顶元素与该右括号比较,看他们是否匹配,若匹配,则让栈顶元素出栈,若不匹配,则就输出相应的提示信息

void IsMatch(char* str)//判断括号是否匹配,其实没必要用老师的测试。

当然苦括号有大括号,中括号,小括号,但没关系,这些,我的程序都可以检测的出来。

void IsMatch(char* str)//判断括号是否匹配,其实没必要用老师的测试。
{
	assert(str);
	int len = strlen(str);
	Stack s;
	StackInit(&s);
	int size=0;//栈中有效元素的个数
	int i = 0;
	char top = 0;
	int left = 0;//记录字符串中左括号的个数
	int right = 0;//记录字符串中右括号的个数//")abcd]p"//"([]){}";
	for (i = 0; i < len; i++)//执行完了之后再上去循环
	{
		if (str[i] == '(' || str[i] == '{' || str[i] == '[')
		{
			StackPush(&s, str[i]);
			left++;
			
		}
		else//判断括号是否匹配
		{
			if (!StackEmpty(&s))
			{
				top = StackTop(&s);
				if ((top == '(' && str[i] == ')') || (top == '{' && str[i] == '}') || top == '['&&str[i] == ']')//判断栈顶元素与当前元素是否匹配
				{
					StackPop(&s);
					
				}
			}
		}
		if (str[i] == ']' || str[i] == ')' || str[i] == '}')
		{
			right++;
		}
		
  }
	
	size = StackSize(&s);
	printf("%d\n", size);
	if (0 == size&&0==left&&0==right)
	{
	  printf("您的输入中不含有括号");
	}
	if (0 == size&&left==right)
	{
		printf("该字符串的左右括号匹配");
	}
	if (size != 0&&left>right)
	{
      printf("首先该字符串中的括号是不匹配的且该字符串的左括号多于右括号");
	}
	if (0 == size && left<right)
	{
		printf("首先该字符串中的括号是不匹配的且该字符串的右括号多于左括号");
	}
	
}

如果有不完善的,请大家多多指正。

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/weixin_40797414/article/details/80490630
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞