括號問題
作者: 李廷元
單位: 中國民用航空飛行學院
時間限制: 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函數次數過多。