• 信息学奥赛一本通(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;
    }
    
  • 相关阅读:
    Code-EncryptDecrypt:DES
    Code-Helper:EncryptHelper.cs
    Code-Helper:EmailHelper.cs
    养生-影视:《长寿之道——长寿村里的百岁夫妻》
    影视-栏目:《致富经》
    影视-栏目:《远方的家》
    影视-纪录片:《长江行》
    影视-纪录片:《塔里木河》
    影视-纪录片:《天山脚下》
    Counting Lines, Words, and Characters with wc
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338975.html
Copyright © 2020-2023  润新知