栈的实际应用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;
}
C++

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

栈的实际应用2

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

C语言

栈的实际应用

2024-11-14 17:19:10

C语言

前缀中缀后缀表达式

2024-11-14 18:28:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

Powered by atecplugins.com