信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1354:括弧匹配检验

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 5098 通过数: 1642

【题目描述】

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。

现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。输入一个字符串:[([][])],输出:OK。

【输入】

输入仅一行字符(字符个数小于255)。

【输出】

匹配就输出 “OK” ,不匹配就输出“Wrong”。

【输入样例】

[(])

【输出样例】

Wrong

【来源】

No

代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[100000];
int main ()
{
	string s;
	bool f;
	cin>>s;
	int t=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='('||s[i]=='[') a[++t]=s[i];
		if(s[i]==')')
		{
			if(a[t]=='(') t--;
			else t++;
		}
		if(s[i]==']')
		{
			if(a[t]=='[') t--;
			else t++;
		}
	}
	if(t==0) cout<<"OK"<<endl;
	else cout<<"Wrong"<<endl;
	return 0;
}
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string s;
int n;
bool check(string s)
{
	stack<char>p;
	//p为栈
	p.push('#');
	//栈底为#,避免越界
	for(int i=0;i<s.size();i++)
	{
		char c=s[i];
		if(c==')')
		{
			if(p.top()!='(') return false;
			else p.pop();
		}
		else if(c==']')
		{
			if(p.top()!='[') return false;
			else p.pop();
		}
		else p.push(c);
	}
	return(p.size()==1);
}
int main ()
{
	cin>>s;
	if(check(s)) cout<<"OK"<<endl;
	else cout<<"Wrong"<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/AlexKing007/p/12338976.html