栈的第一次接触

困难1:如何表示括号配对
困难2:标记值没有在循环开始时归零
困难3:垃圾数据没有处理,提前判错的数据未处理时会进入下一次循环导致错误
困难3的解决方案:放弃边输入边处理的处理方式,改为一次性输入存入数组,再用循环处理判断

#include<stdio.h>
#include<string.h>
#include<math.h>
char a[10005];
int main()
{
    int k=1,i=0;
    int n;
    char t;
    scanf("%d",&n);
    getchar();
    while(n--){
        i=0;
        k=1;
        while(scanf("%c",&t),t!='\n'){
            if(t=='('||t=='[')
            {
                a[i]=t;
                i++;    
            }
            else
            {
                if((t==']'||t==')')&&i==0)
                {
                    k=0;
                    break;
                }
                if(t-a[i-1]==53||t-a[i-1]==-50)
                {
                    k=0;
                    break;                    
                }
                if(t-a[i-1]==1||t-a[i-1]==2)
                i--;
            }
        }
        if(k==0)
            printf("No\n");
        else
        {
            if(i==0)
            printf("Yes\n");
            else
            printf("No\n");
        }
        fflush(stdin);
    }
}
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页