[保研/考研机试] 括号匹配问题 C++实现

题目描述:

在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来的字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注。

输入描述:

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串

长度不超过100。

输出描述:

对每组输出数据,输出两行,第一行包含原始输入字符,第二行由""、"?"和空格组成,""和"?"表示与之对应的左括号和右括号不能匹配。

源代码:

cpp 复制代码
#include<iostream>
#include<stack>
using namespace std;


//例题5.5 括号匹配问题
int main()
{
	string s;
	cin >> s; // )(rttyy())sss)(
	stack<char> myStack;
	stack<int> myNums;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '(') {
			myStack.push(s[i]);
			myNums.push(i);
		}
		if (s[i] == ')') {
			if (!myStack.empty() && myStack.top() == '(') {
				myStack.pop();
				myNums.pop();
			}
			else {
				myStack.push(s[i]);
				myNums.push(i);
			}
		}
	}
	string ss = "a";
	for (int i = 0; i < s.size(); i++) {
		ss += ' ';
	}

	while(!myNums.empty()) {
		if (s[myNums.top()] == '(') {
			ss[myNums.top()] = '$';
			myNums.pop();
		}
		if (s[myNums.top()] == ')') {
			ss[myNums.top()] = '?';
			myNums.pop();
		}
	}

	cout << s << endl;
	cout << ss << endl;

	return 0;
}

运行结果;

相关推荐
xlp666hub1 小时前
C++ 链表修炼指南
数据结构·c++
木心月转码ing3 小时前
Hot100-Day24-T128最长连续序列
算法
小肥柴3 小时前
A2UI:面向 Agent 的声明式 UI 协议(三):相关概念和技术架构
算法
学高数就犯困6 小时前
性能优化:LRU缓存(清晰易懂带图解)
算法
xlp666hub8 小时前
Leetcode第七题:用C++解决接雨水问题
c++·leetcode
CoovallyAIHub8 小时前
CVPR 2026 | MixerCSeg:仅2.05 GFLOPs刷新四大裂缝分割基准!解耦Mamba隐式注意力,CNN+Transformer+Mamba三
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
YOLO26-Pose 深度解读:端到端架构重新设计,姿态估计凭什么跨代领先?
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
化工厂气体泄漏怎么用AI检测?30张图3D重建气体泄漏场景——美国国家实验室NeRF新研究
深度学习·算法·计算机视觉
肆忆_9 小时前
实战复盘:手写 C++ 虚拟机的高性能并行 GC (Thread Pool + Work Stealing)
c++
肆忆_9 小时前
虚函数进阶答疑:把上一篇博客评论区里最容易卡住的问题,一次追到底
c++