当前位置: 移动技术网 > IT编程>开发语言>C/C++ > PTA-括号问题

PTA-括号问题

2019年04月23日  | 移动技术网IT编程  | 我要评论

江湖任我行修改器,云邪公子,华阴天气预报

括号问题

作者: 李廷元
单位: 中国民用航空飞行学院
时间限制: 400 ms
内存限制: 64 mb
代码长度限制: 16 kb

问题描述

给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查>这一串字符中的( ) ,[ ],{ }是否匹配。

输入格式:

输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。

输出格式:

如果括号配对,输出yes,否则输出no。

输入样例1:

sin(10+20)

输出样例1:

yes

输入样例2:

{[}]

输出样例2:

no

代码

#include<stdio.h>
#include<stdlib.h>
#define maxsize 100

typedef struct snode* stack;
struct snode {
    char data[maxsize];
    int top;
};

stack create ();
int push (stack s, char x);
char pop (stack s);

int main ()
{
    char str[101];
    stack s = create ();
    int i = 0, flag = 1;
    gets(str);
    while(str[i] != '\0')
    {
        if(str[i] == '(' || str[i] == '[' || str[i] == '{')
            push(s, str[i]);
        else if(str[i] == ')' || str[i] == ']' || str[i] == '}')
        {
            if(s->top == -1)
            {
                flag = 0;
                printf("no\n");
                break;
            }
            if(str[i] == ')')
            {
                if(s->top == -1 || s->data[s->top] != '(')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else pop(s);
            }
            if(str[i] == ']')
            {
                if(s->top == -1 || s->data[s->top] != '[')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else pop(s);
            }
            if(str[i] == '}')
            {
                if(s->top == -1 || s->data[s->top] != '{')
                {
                    flag = 0;
                    printf("no\n");
                    break;
                }
                else pop(s);
            }
        }
        i++;
    }
    
    if(flag != 0)
    {
        if(s->top == -1)
            printf("yes\n");
        else
            printf("no\n");
    }
    
    return 0;
}
stack create ()
{
    stack s = (stack)malloc(sizeof(struct snode));
    s->top = -1;
    
    return s;
}
int push (stack s, char x)
{
    if(s->top == 99)
    {
        printf("stack full\n");
        return -1;
    }
    else
    {
        s->data[++(s->top)] = x;
        return 1;
    }
}
char pop (stack s)
{
    if(s->top == -1)
    {
        printf("stack empty\n");
        return -1;
    }
    else
        return (s->data[(s->top)--]);
}

一开始是使用的while((ch = getchar()) != '\n')来读取字符,结果一直超时,个人认为可能是因为调用getchar函数次数过多。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网