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

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/xuqi7/article/details/50076789
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞