利用栈检测括号符号的匹配 我们知道我们在编程中,如果我们的括号符不匹配的话,编译器会报错,检测原理就是通过栈的机制。 检测通过相同符号的数量以及符号是否匹配 比如我们有一个字符串"[()]" 遇到开放符号就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说明这俩个括号匹配
这样就可以少写很多判断代码,当判断栈顶元素和当前闭合符号是否匹配(在栈不为空的情况下),不匹配直接返回不匹配,如果匹配则弹出栈,之后再次进入循环判断。