1. 程式人生 > >C語言 括號 配對 不相交

C語言 括號 配對 不相交

題目如下:

判斷一個字元序列中(與)、[與]、{與}是否配對且互不相交

分析:

如果只要求配對的話,直接統計這些字元的兩兩對應數目是否相等即可,

但關鍵點在於互不相交,互不相交是什麼意思呢,離得最近的左右括號一定是相同型別的,去掉這兩個括號,再按這個規則匹配,最後可以把括號全部去掉,那就是互不相交的

注意一點,寫程式碼千萬別亂複製貼上,要認真仔細

寫程式之前要先把思路理清,按照思路把程式碼寫出來,畢竟程式碼就是展現你的思路的,思路清晰程式碼就清晰,思路混亂程式碼就一團糟

//題目:判斷一個字元序列中(與)、[與]、{與}是否配對且互不相交

#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;
}