用棧adt應用:對稱符號匹配判斷
輸入一行符號,以#結束,判斷其中的對稱符號是否匹配。對稱符號包括:
、 [ ] 、 ( )、 < >
輸出分為以下幾種情況:
(1)對稱符號都匹配,輸出 「 right. 「
(2) 如果處理到最後出現了失配,則輸出兩行:
第一行:matching failure.
第二行:loss of right character $$…. 其中$$… 是按巢狀順序對應的右匹配符號。
(3)處理到某個符號時失配了,則輸出兩行或三行:
第一行: the n character 『$』 is wrong.」 ,其中n是出錯符號的序號,$是出錯的符號;
第二行: loss of left character $.」 其中 $ 是當前符號的左匹配符號。
(如果有的話)第三行:loss of right character $$…」 其中$$… 是按巢狀順序對應的右匹配符號。
例如:
輸入 (a.b)>#
輸出:
the 6 character >』 is wrong.
loss of left character <.
輸入 :
輸出:
matching failure.
loss of right character }).
例如:
輸入 result
as(*x<))}>)#
right.
(a.b)>#
the 6 character '>' is wrong.
loss of left character <.
ps:簡單的棧應用——**是不是易懂呢。。
#pragma gcc optimize(3,"ofast","inline")
#includeusing namespace std;
#define rep(i , a , b) for(register int i=(a);i<=(b);++i)
#define per(i , a , b) for(register int i=(a);i>=(b);--i)
// #define ms(s) memset(s, 0, sizeof(s))
// typedef long long ll;
// typedef unsigned long long ull;
// typedef pairpi;
// typedef unordered_mapun_map;
templateinline void read (t &x)
while (c >= '0' && c <= '9')
x = x * sign;}
const int maxn = 1e5+10;
// const int inf = 0x3f3f3f3f;
// const ll inf = ll(1e18);
// const ll mod = 1011110011;
// const double pi = acos(-1);
char s[maxn];
stackp,q,r,m;
void print_s()
if(y>x&&y>z&&y>l)
if(z>x&&z>y&&z>l) ");
} if(l>x&&l>y&&l>z)
} printf(".\n");
}int main(int argc, char * ar**)
} else if(s[i]==']')
} else if(s[i]=='}')
} else if(s[i]=='>')
} }if(f)
if(p.size()==1&&q.size()==1&&r.size()==1&&m.size()==1)
else
return 0;
}
資料結構實驗之棧四 括號匹配
time limit 1000ms memory limit 65536k 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入資料有多組,處理到檔案結束。如果匹配就輸出 yes 不匹配輸出 no sin 20 10 yesno ma...
資料結構實驗之棧四 括號匹配
資料結構實驗之棧四 括號匹配 time limit 1000ms memory limit 65536k 題目描述 給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入 輸入資料有多組,處理到檔案結束。輸出 如果匹配就輸出 yes 不...
資料結構實驗之棧四 括號匹配
給你一串字元,不超過50個字元,可能包括括號 數字 字母 標點符號 空格,你的任務是檢查這一串字元中的 是否匹配。輸入資料有多組,處理到檔案結束。如果匹配就輸出 yes 不匹配輸出 no sin 20 10 yesno 鍊錶的方法,較為複雜。需要建立鏈棧,將陣列代替棧的方法換為了線性表 includ...