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] != '\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函數次數過多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM