[[(( ))]](())[[[]]]
编写程序看上述括号是否匹配。
看到上述问题,我们应该首先考虑到用栈来解决。
栈的特点:先进后出。
代码实现如下:
#include <iostream>
#include <stack>
#include <stdio.h>
#include <string.h>
using namespace std;
#define S 10000
bool fun(char *arr)
{
stack <char>stk;
char *p = arr;
while(*p)
{
//如果是左括号,则入栈 进入下一次循环
if(*p == '(' || *p == '[')
{
stk.push(*p);
p++;
continue;
}
//如果是右括号 首先判断栈是否为空 如果不为空 再判断栈顶元素是否和×p匹配
if(*p == ')' && !stk.empty()&& stk.top() == '(')
{
stk.pop();
p++;
continue;
}else if(*p == ')' && !stk.empty()&& stk.top() != '(')
{
return false; //如果不匹配直接返回 false
}
if(*p == ']' && !stk.empty()&& stk.top() == '[')
{
stk.pop();
p++;
continue;
}else{
return false;
}
}
//循环结束 如果栈为空 返回true
if(stk.empty())
return true;
return false;
}
下面是给出的主函数 来测试我们写出的算法
int main()
{
int input_num;
int i;
char arr[S] = "";
cin >> input_num;
for(i=0;i<input_num;i++)
{
memset(arr,0,sizeof(arr));
scanf("%s",arr);
if(fun(arr))
{
cout << "Yes" <<endl;
}else{
cout << "No" <<endl;
}
}
}