文章

40

粉丝

607

获赞

68

访问

400.5k

头像
1296括号匹配问题(考试之前复习一下)
P1296 北京大学机试题
发布于2020年4月21日 13:00
阅读数 9.7k

#include<iostream>
#include<string>
#include<cstring>
#include<stack>
#include<vector>
using namespace std;

int main() {
	string s;
	while (cin >> s) {
		stack sta;
		string str = s;//申请一个与s大小相等字符串空间str
		for (int i = 0;i < s.size();i++) {
			str[i] = ' ';//把申请的字符串空间str全部置为空格
			if (s[i] == '(') {//如果是左括号则直接进栈
				sta.push(i);
			}
			else if (s[i] == ')') {//是右括号看栈是不是空
				if (!sta.empty()) {//不空说明栈中有左括号与当前右括号匹配
					sta.pop();//把匹配的左括号出栈
				}
				else if (sta.empty()) {//如果栈空说明没有与之匹配的左括号
					str[i] = '?';//需要在str上把相应的位置置为“?”号
				}
			}
		}
		while (!sta.empty()) {//判断栈是否为空,不空说明栈中有未匹配完的左括号
			str[sta.top()] = '$';//把未匹配的左括号,在str相应位置置为“$”
			sta.pop();
		}
		cout << s << endl << str << endl;//输出s,和str
	}

	return 0;
}
))))UUUU((()为例
申请两个字符串空间sstr
S:
字符
)
)
)
)
U
...
登录查看完整内容


登录后发布评论

1 条评论
admin SVIP
2020年4月21日 20:45

小七写的题解太棒了,点个赞yes

赞(0)