做者: 李廷元
單位: 中國民用航空飛行學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB編程
給定一串字符,不超過100個字符,可能包括括號、數字、字母、標點符號、空格,編程檢查>這一串字符中的( ) ,[ ],{ }是否匹配。函數
輸入格式:
輸入在一行中給出一行字符串,不超過100個字符,可能包括括號、數字、字母、標點符號、空格。code
輸出格式:
若是括號配對,輸出yes,不然輸出no。內存
輸入樣例1:
sin(10+20)
字符串輸出樣例1:
yes
get輸入樣例2:
{[}]
io輸出樣例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函數次數過多。di