文章

9

粉丝

126

获赞

11

访问

52.0k

头像
括号匹配(结构体方法)
P1296 北京大学机试题
发布于2022年3月6日 14:54
阅读数 5.3k

新手,勿喷

这里采用的是结构体的方法

实际上再开辟一个数组直接记录不匹配括号的下标会更简洁(有空再写)

#include <iostream>
using namespace std;
#include <string.h>
#include <stack>

struct node 
{
	char s;
	int num;
};

stack <struct node> st;//创建一个栈,每个元素都是一个结构体,num用来存储字符串下标,以便锁定不匹配括号的位置 

char arr[105];//创建数组,方便利用scanf赋值 

int main ()
{
	while (scanf("%s", arr) != EOF)
	{
		int len = strlen (arr);
		struct node a[105];//创建结构体数组,和数组arr保持统一,方便入栈出栈 
		for (int j = 0; j < len; j++)//和数组arr保持统一
		{
			a[j].s = arr[j];
			a[j].num = j;
		}

		for (int i = 0; i < len; i++)//常规操作(括号匹配判断) 
		{
			if (!st.empty() ) 
			{
				struct node now = st.top() ;
				if (now.s == '(' && arr[i] == ')')
					st.pop() ;
				else if (arr[i] == '(' || arr[i] == ')')
					st.push(a[i]) ;
			}
			else if (arr[i] == '(' || arr[i] == ')')
				st.push(a[i]) ;
		}
		
		for (int i = 0; i < len; i++)//由于输出中要有原先的字符串,在这里先输出 
		{
			printf ("%c", arr[i]);
			arr[i] = ' ';/...
登录查看完整内容


登录后发布评论

1 条评论
Zyc_nj
2024年1月19日 16:16

牛的

yes

赞(0)