C語言 括號 配對 不相交
阿新 • • 發佈:2019-02-06
題目如下:
判斷一個字元序列中(與)、[與]、{與}是否配對且互不相交
分析:
如果只要求配對的話,直接統計這些字元的兩兩對應數目是否相等即可,
但關鍵點在於互不相交,互不相交是什麼意思呢,離得最近的左右括號一定是相同型別的,去掉這兩個括號,再按這個規則匹配,最後可以把括號全部去掉,那就是互不相交的
注意一點,寫程式碼千萬別亂複製貼上,要認真仔細
寫程式之前要先把思路理清,按照思路把程式碼寫出來,畢竟程式碼就是展現你的思路的,思路清晰程式碼就清晰,思路混亂程式碼就一團糟
//題目:判斷一個字元序列中(與)、[與]、{與}是否配對且互不相交 #include <stdio.h> int main() { char a[30], stack[30]; //a字元陣列用於存字串,stack字元陣列模擬棧 int n = -1; //用於計數 int i, m = 0; //m用於對棧的記錄 int sbracket = 1, mbracket = 1, lbracket = 1; //假設初始括號匹配 printf("本程式匹配括號及不可相交"); printf("請輸入字串,以‘#’結尾:\n"); //寫入字串 do { n += 1; scanf("%c", &a[n]); } while (a[n] != '#'); for (i = 0; i <= n; i++) { if (a[i] == '(' || a[i] == '[' || a[i] == '{') { //寫入堆疊 stack[m] = a[i]; m += 1; } if (a[i] == ')' || a[i] == ']' || a[i] == '}') { //比較 if ((a[i] == ')'&&stack[m - 1] == '(') || (a[i] == ']'&&stack[m - 1] == '[') || (a[i] == '}'&&stack[m - 1] == '{')) { m -= 1; } else { printf("不符合條件!"); return 0; } } } if(m==0) //判斷棧是否為空,若空則符合條件 printf("符合條件!\n"); else printf("不符合條件!\n"); return 0; }