zoukankan      html  css  js  c++  java
  • PTA-括号问题

    括号问题

    作者: 李廷元
    单位: 中国民用航空飞行学院
    时间限制: 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] != '')
    	{
    		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
    ");
    				break;
    			}
    			if(str[i] == ')')
    			{
    				if(S->Top == -1 || S->data[S->Top] != '(')
    				{
    					flag = 0;
    					printf("no
    ");
    					break;
    				}
    				else Pop(S);
    			}
    			if(str[i] == ']')
    			{
    				if(S->Top == -1 || S->data[S->Top] != '[')
    				{
    					flag = 0;
    					printf("no
    ");
    					break;
    				}
    				else Pop(S);
    			}
    			if(str[i] == '}')
    			{
    				if(S->Top == -1 || S->data[S->Top] != '{')
    				{
    					flag = 0;
    					printf("no
    ");
    					break;
    				}
    				else Pop(S);
    			}
    		}
    		i++;
    	}
    	
    	if(flag != 0)
    	{
    		if(S->Top == -1)
    			printf("yes
    ");
    		else
    			printf("no
    ");
    	}
    	
    	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
    ");
    		return -1;
    	}
    	else
    	{
    		S->data[++(S->Top)] = x;
    		return 1;
    	}
    }
    char Pop (Stack S)
    {
    	if(S->Top == -1)
    	{
    		printf("Stack Empty
    ");
    		return -1;
    	}
    	else
    		return (S->data[(S->Top)--]);
    }
    

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

  • 相关阅读:
    命令模式(Command Pattern)
    外观模式(Facade Pattern)
    Hash函数的安全性
    单向散列函数
    装饰者模式(Decorator Pattern)
    尝试设计LFSR加密器,并用CAP4验证随机性
    对称密码-流密码
    组合模式(Composite Pattern)
    桥接模式(Bridge Pattern)
    适配器模式(Adapter Pattern)
  • 原文地址:https://www.cnblogs.com/xueyubao/p/10750509.html
Copyright © 2011-2022 走看看