文章

17

粉丝

166

获赞

6

访问

144.5k

头像
用栈同时记录字符和下标
P1296 北京大学机试题
发布于2021年2月20日 12:56
阅读数 8.2k

#include <bits/stdc++.h>

using namespace std;

string s;
typedef pair<char, int> PCI;

int main()
{
	while(cin >> s)
	{
	    //注意stack和bool要清零
	    stack<PCI> st;
	    bool num[110] = {false};
		for(int i = 0; i < s.size() ; i++)
		{
			if(isalpha(s[i])) continue;
			if(st.empty()) st.push(make_pair(s[i], i));
			else
			{
				auto t = st.top();
				if(t.first == '(' && s[i] == ')')
					st.pop();
				else st.push(make_pair(s[i], i));
			}
		}
		
		while(!st.empty())
		{
			//存储没有匹配上的下标
			num[st.top().second] = true;
			st.pop();
		}
		
		cout << s << endl;
		for(int i = 0; i < s.size(); i++)
		{
		    if(num[i])
		    {
		        if(s[i] == '(') cout << '$';
		        else if(s[i] == ')') cout << '?';
		    }
		    else cout << " ";
		}
		cout << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发