欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ny02 括号配对问题

程序员文章站 2022-06-01 17:14:17
...

1.队列(先进先出)

Queue
queue 模板类的定义在<queue>头文件中。
所以需要写上 #include<queue>
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素注意,并不会返回被弹出元素的值。!!!!一定要记住啊!!!!
访问队首元素,如例:q.front(),即最早被压入队列的元素
访问队尾元素,如例:q.back(),即最后被压入队列的元素。(有的时候要和q.pop()一起使用)
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

2.栈(stack):

c++ stl栈stack的头文件为: 

#include<stack>

stack<int> S;//声明一个对象

S.empty();//栈空返回true 否则false

int x=S.size();//返回栈中元素个数于x

S.pop();//移除栈顶元素(pop之前一定要注意,它是不是栈为空啊!!)

S.push(x);将x置于栈顶

x=S.top();返回栈顶元素

 

3.因为>>没有重载字符串,所以要加#include <string>

4.像这种输出一块的,输入一块的,用数组解决,这次的判断,我用了bool类型的数组!

#include<iostream>
#include <stack>
#include <string>//>>没有重载字符串的,必须要增加#include <string>
using namespace std;
int main()
{
	stack<char> q;
	int n,num=0;
	cin>>n;
	bool check[100];
	while(n--)
	{
		string s;
		cin>>s;
		int len=0;
		check[num]=true;
		for(int i=0;i<s.length();i++)
		{
			//如果你''单引号中有多个字符,就会显示数字,把它当作ascii码
			switch(s[i])
			{
			case '[':q.push(s[i]);len++;break;
			case '(':q.push(s[i]);len++;break;
			case ']':if(len!=0)
					 {
				    if(q.top()=='[')
					 {q.pop();len--;break;}
				      else check[num]=false;break;
					 }
				else check[num]=false;
			case ')':if(len!=0)
					 {
				    if(q.top()=='(')
					 {q.pop();len--;break;}
				      else check[num]=false;break;
					 }
				else check[num]=false;
			}
		}

	if(len!=0)
		check[num]=false;

	num++;
	
	}

	for(int i=0;i<num;i++)
	{
		if(check[i]==true)
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}