題目描述
苗苗今天剛剛學會使用小括號,不過他分不清小中大括號和尖括號,不知道怎么使用其他括號,他認為(>以及{]是正確的(其實是錯誤的),你能幫助他判斷括號是否使用正確(匹配)嗎?
解答要求時間限制:1000ms, 內存限制:64MB
輸入
輸入文件包含六組測試數據,每組測試數據是一行只包含’(‘,’)’,’{‘,’}’,’[‘,’]’,’<’,’>’的字符串(長度不超過10000)。
輸出
對於每組測試數據,如果使用正確輸出yes,否則輸出no。每個占一行。
輸入樣例
[> ([]{<>}) ({[<>]}) () () ()
輸出樣例 1
no
yes
yes
yes
yes
yes
提示
棧的應用:
依次讀入字符,如果是左括號,將它放進棧,如果是右括號,而且棧頂元素是相對應的左括號,就把棧頂元素彈出,最后如果棧空就跳出循環,結果為no,因為這樣說明棧中沒有左括號;字符全都讀入,如果棧空的話,就是yes,否則就是no。
// // Created by l50007414 on 2019/9/18. // #include <stdio.h> #include <string.h> void caculate1(char *data); typedef struct stack { char data[10000]; int top; } stack; int main() { for (int i = 0; i < 6; ++i) { char data[10000]; gets(data); caculate1(data); } return 0; } void caculate1(char *data) { stack temp = {{0}, -1}; int size = strlen(data); for (int i = 0; i < size; ++i) { //如果是左括號 將其入棧 if (data[i] == '(' || data[i] == '{' || data[i] == '[' || data[i] == '<') { temp.data[++temp.top] = data[i]; } else { //如果不是 就將其與棧頂元素比較 不等則出錯 相等就出棧 if ((data[i] == ')' && temp.data[temp.top] == '(') || (data[i] == '}' && temp.data[temp.top] == '{') || (data[i] == ']' && temp.data[temp.top] == '[') || (data[i] == '>' && temp.data[temp.top] == '<')) { temp.top--; } else { printf("no\n"); return;; } } } if (temp.top == -1) { printf("yes\n"); } else { printf("no\n"); } }
