• 括号配对问题


    //之前的代码一直是RuntimeError,,没有考虑到low越界,low最小为0

    //错误代码

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int n,t,low,high,i;
    	char a[10000],s[10000];
    	scanf("%d",&n);
    	while(n--)
    	{
    		scanf("%s",a);
    		t=strlen(a);
    		low=0;
    		high=0;
    		for(i=0;i<t;i++)
    		{
    			switch(a[i])
    			{
    			case '(':
    			case'[':
    				s[low++]=a[i];break;
    			case ')':
    				if(s[--low]=='(')
    				{
    					high++;
    					break;
    				}
    				else
    				{
    					break;
    				}
    
    			case']':
    				if(s[--low]=='[')
    				{
    					high++;
    					break;
    				}
    				else
    					break;
    			}
    		}
    		if(t==high*2)
    			printf("Yes
    ");
    		else printf("No
    ");
    	}
    	return 0;
    }
    
    //改正之后的代码

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int n,t,low,high,i;
    	char a[10000],s[10000];
    	scanf("%d",&n);
    	while(n--)
    	{
    		scanf("%s",a);
    		t=strlen(a);
    		low=0;
    		high=0;
    		for(i=0;i<t;i++)
    		{
    			switch(a[i])
    			{
    			case '(':
    			case'[':
    				s[low++]=a[i];break;
    			case ')':
    				if(low!=0&&s[--low]=='(')
    				{
    					high++;
    					break;
    				}
    				else
    				{
    					break;
    				}
    
    			case']':
    				if(low!=0&&s[--low]=='[')
    				{
    					high++;
    					break;
    				}
    				else
    					break;
    			}
    		}
    		if(t==high*2)
    			printf("Yes
    ");
    		else printf("No
    ");
    	}
    	return 0;
    }
    

    //之后用栈写的

    #include<iostream>
    #include<string.h>
    #include<stack>
    using namespace std;
    int main()
    {
    	int n,i;
    	char a[10000];
    	stack<char>p;
    	cin>>n;
    	while(n--)
    	{
    		while(!p.empty())
    			p.pop();
    		int flag=1;
    		cin>>a;
    		int t=strlen(a);
    		for(i=0;i<t;i++)
    		{
    			switch(a[i])
    			{
    			case '(':
    			case '[':p.push(a[i]);break;
    			case ')':
    				{
    				if(!p.empty()&&p.top()=='(')
    					p.pop();
    				else   flag=0;
    				break;
    				}
    			case ']':
    				{
    				if(!p.empty ()&&p.top()=='[')
    					p.pop ();
    				else flag=0;
    				break;
    				}
    			}
    			if(flag==0)
    			{
    				cout<<"No"<<endl;
    				break;
    			}
    		}
    		if(p.empty()&&flag==1)
    			cout<<"Yes"<<endl;
    	}
    	return 0;
    }



  • 相关阅读:
    深度学习
    !gcc !vi
    条件、循环及其他语句
    当索引行不通时
    我的排班日期
    Linux使用storcli工具查看服务器硬盘和raid组信息
    storcli64和smartctl定位硬盘的故障信息
    Shell-四剑客
    iostat
    /VAR/LOG/各个日志文件分析
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4237317.html
Copyright © 2020-2023  润新知