目录
前言:
采用顺序栈来进行括号匹配
编程语言是C&C++混合,学多了已经分不太清了,比如说什么malloc、new、delete、free混着用,直接一起来呗!
代码实现:
#include <iostream>
#define MAXSIZE 20
typedef struct {
char data[MAXSIZE];
int top; //栈顶指针指向栈顶元素
}SqStack; //顺序栈
class Stack {
public:
SqStack S;
Stack() {
S.top = -1; //构造函数初始化栈
}
//判断栈空
bool StackEmpty() {
if (S.top == -1)
return true;
else
return false;
}
//入栈
bool Push(char x) {
if (S.top == MAXSIZE - 1)
return false; //栈满
S.data[++S.top] = x;
return true;
}
//出栈
bool Pop(char& x) {
if (S.top == -1)
return false; //栈空
x = S.data[S.top--];
return true;
}
//获取栈顶元素
bool GetTop(char& x) {
if (S.top == -1)
return false; //栈空
x = S.data[S.top];
return true;
}
~Stack() {}
};
//括号匹配
bool BracketCheck(char str[], int lenth)
{
Stack SSS; //栈对象
for (int i = 0; i < lenth; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
SSS.Push(str[i]); //扫描到左括号进栈
}
else {
if (SSS.StackEmpty())//扫描到右括号且栈空
return false; //匹配失败
char topElem;
SSS.Pop(topElem); //栈顶元素出栈
if (str[i] == ')' && topElem != '(')
return false;
else if (str[i] == ']' && topElem != '[')
return false;
else if (str[i] == '}' && topElem != '{')
return false;
}
}
return SSS.StackEmpty(); //如果最后栈空,则匹配成功
}
int main()
{
char bracket[10];
std::cout << "请输入10个括号:\n";
for (int i = 0; i < 10; i++) {
//std::cin >> bracket[i];
scanf_s("%c", &bracket[i]);
}
if (BracketCheck(bracket, 10)) {
std::cout << "匹配成功!\n";
}
else {
std::cout << "匹配失败!\n";
}
system("pause");
return 0;
}
测试结果:
以上均为个人学习心得,如有错误,请不吝赐教~
THE END