括号匹配问题
解决括号匹配问题需要利用到栈这种数据结构,关于如何创建一个栈以及它的方法就不说了,下面直接给出解决括号匹配问题的C++代码:
#include<iostream>
using namespace std;
#include"MyStock.hpp";//这是栈模板
int main()
{
char ch []= "{[()]]}"; //假设给个字符串为这种形式(不匹配)
MyStack<char>* pStack = new MyStack<char>(20);//利用写的栈模板初始化一个char型的栈,可容纳元素个数自定义,我这里写的20
if (ch[0] == ')' || ch[0] == ']' || ch[0] == '}') //若首元素为右括号)}],则直接结束程序,括号不匹配
{
cout << "括号不匹配" << endl;
system("pause");
return 0;
}
else
{
pStack->Push(ch[0]); //否则,直接将首元素入栈
}
for (int i = 1; i < strlen(ch); i++) //从第二个元素开始遍历
{
switch (ch[i])
{
case '(': //若其为左括号,则继续入栈
pStack->Push(ch[i]);
break;
case '[':
pStack->Push(ch[i]);
break;
case '{':
pStack->Push(ch[i]);
break;
case ')': //若为右括号,则判断其与栈内首元素是否等于其相应的左括号,等于则出栈
if (pStack->TopElement() == '(')// TopElement()为栈的成员函数,返回栈内首元素
{
char elem;
pStack->Pop(elem); //Pop()为栈的成员函数,将首元素出栈,并赋给elem,此处的elem只起到接收作用,并无其他作用
}
else
{
cout << "括号不匹配" << endl;
system("pause");
return 0;
}
break;
case ']':
if (pStack->TopElement() == '[')
{
char elem;
pStack->Pop(elem);
}
else
{
cout << "括号不匹配" << endl;
system("pause");
return 0;
}
break;
case '}':
if (pStack->TopElement() == '{')
{
char elem;
pStack->Pop(elem);
}
else
{
cout << "括号不匹配" << endl;
system("pause");
return 0;
}
break;
}
}
//最后,若栈为空,说明括号匹配,否则不匹配
if (pStack->StackEmpty())
{
cout << "括号匹配" << endl;
}
else
{
cout << "括号不匹配" << endl;
}
delete pStack
system("pause");
return 0;
}
后面大家试验有什么不对的地方,欢迎批评指正。