括号匹配(一个已知括号组的完成)

用数组储存,目的是找到一个个完整的括号组,即括号组里面左括号,右括号相等。对每个括号组进行处理。
首先遍历一组,记录有多少个左括号。给每个数组元素一个编号,是数组下标加一。再遍历数组,每找到一个右括号,就往前找一个左括号。
找到一对后,用一个二维数组记录左右括号的位置。为了避免左括号重复被找,每找到一对,就改变编号成一个特殊数字。
最后根据输出的需要,需要将数组里的左括号编号从小到大输出,需要查找,记录。需要记录result_array的值,因为在排序时不断改变原本数组的值,所以在最后输出,需要一个初始的数组。

include <stdio.h>

	int main()
	{
		char a[8]={'(','(','(',')','(',')',')',')'};
		int remark_array[8]={0};
		for(int i=0;i<8;i++) remark_array[i]=i+1;
		int sum_left;
		int result_array[4][2];
		int p=0;
		int sort_array[4]={0};
		
		int right_now_location;	
		int left_location;
		for(int j=0;j<8;j++)
		{
			if(a[j]==')')
			{
				
				right_now_location=j;
				left_location=j-1;
				while(remark_array[left_location]<0)
				{
					left_location--;
				}
				result_array[p][0]=left_location+1;
				result_array[p][1]=right_now_location+1;
				p++;
				remark_array[left_location]=-1;
				remark_array[right_now_location]=-1;
			}
			
		}
		int mid_array[4][2];
		for(int i=0;i<4;i++)
			for(int j=0;j<4;j++)
				mid_array[i][j]=result_array[i][j];
		int min_num=0;
		int min;
		for(int i=0;i<p;i++)
		{
			int min=result_array[0][0];
			min_num=0;
			for(int j=1;j<p;j++)
			{
				
				if(result_array[j][0]<min) 
				{
					min=result_array[j][0];
					min_num=j;
				}
			}
			sort_array[i]=min_num;
			result_array[min_num][0]=100001;
		 }
		 for(int i=0;i<4;i++)
		{
			int n=sort_array[i];
			printf("%d %d\n",mid_array[n][0],mid_array[n][1]);
		} 
	}	
posted @ 2020-12-22 00:15  empty_thought  阅读(149)  评论(0)    收藏  举报