栈的实际应用2

  • 利用栈检测括号符号的匹配
    我们知道我们在编程中,如果我们的括号符不匹配的话,编译器会报错,检测原理就是通过栈的机制。
    检测通过相同符号的数量以及符号是否匹配 比如我们有一个字符串”[()]”
    遇到开放符号就push,遇到闭合符号就看栈顶是不是与这个闭合符号相匹配 如果一个'[‘在(没有闭合的话,那么这个符号就是错误的。
#include<stdio.h>
#include<stack>
using namespace std;
int Judge(char c,char d);
bool Judgechar(char c, char d);
int main()
{
	stack<char> S;
	char str[51] = "{[}{}]";
	int n = strlen(str);
	for (size_t i = 0; i < n; i++)
	{
		if (str[i] == '['||str[i]=='{'||str[i]=='(')
		{
			S.push(str[i]);
		}
		else if (str[i] == ']' || str[i] == '}' || str[i] == ')')
		{
			if (S.empty()|| Judgechar(S.top(),str[i]))
			{
				printf("括号匹配失败,请检查");
				return false;
			}
			else
			{
				S.pop();
			}
		}

	}
	if (S.empty())
	{

		printf("括号无错误\n");
	}
	else
	{
		printf("括号匹配失败,请检查");
	}
}
int Judge(char top,char str)
{
	if (str-top ==1)
	{
		return 0;
	}
	else if (str - top ==2)
	{
		return 0;
	}
	else
	{
		return 1;
	}
	
}
bool Judgechar(char top,char str)
{
	if (top = '('&&str !=')')
	{
		return 1;
	}
	 else if (top = '[' && str != ']')
	{
		return 1;
	}
	else if (top = '{' && str != '}')
	{
		return 1;
	}
	return 0;
}

我这里检测开放符号和闭合符号是用ascall码的值,如果他们的差为1或者2说明这俩个括号匹配

image.png

这样就可以少写很多判断代码,当判断栈顶元素和当前闭合符号是否匹配(在栈不为空的情况下),不匹配直接返回不匹配,如果匹配则弹出栈,之后再次进入循环判断。

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/159/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 6天前
下一篇 6天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注