首页 > 其他分享 >OpenJudge | 扩号匹配问题

OpenJudge | 扩号匹配问题

时间:2024-07-24 18:29:03浏览次数:8  
标签:匹配 int res res1 扩号 括号 str 100 OpenJudge

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!

输出

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

样例输入

((ABCD(x)
)(rttyy())sss)(

样例输出

((ABCD(x)
$$
)(rttyy())sss)(
?            ?$

思路

括号匹配主要是使用栈来解决,遇到左括号就入栈,遇到右括号就出栈,如果栈为空,说明右括号没有匹配的左括号,如果栈不为空,说明左括号没有匹配的右括号。

解题步骤

  1. 设置字符串str和结果字符串res,栈S和队列Q2,还有一个数组res1,用来记录左括号和右括号的匹配情况
  2. 读入字符串str
  3. 遍历字符串,遇到左括号就入栈S,遇到右括号就出栈S,直到栈为空
  4. 如果栈S为空,说明右括号没有匹配的左括号,就要将右括号入队列Q2
  5. 如果栈S不为空,说明左括号没有匹配的右括号。
  6. 遍历字符串,将左括号和右括号的匹配情况记录到数组res1
  7. 遍历数组res1,根据左括号和右括号的匹配情况,将res字符串填充
  8. 输出原字符串和结果字符串
  9. 清空结果字符串和数组res1

Code

C++ STL

#include <bits/stdc++.h>
using namespace std;

int main() {
	string str, res;
	array<int, 100> res1 {};
	queue<int> Q2;
	stack<int> S;
	while(getline(cin, str) && str[0]) {
		for(long long unsigned int i = 0; i < str.size(); i++) {
			if(str[i] == '(') S.push(i);
			else if(str[i] == ')') {
				if(!S.empty()) S.pop();
				else Q2.push(i);
			}
		}	
		while(!S.empty()) {
			res1[S.top()] = 1;
			S.pop();
		}
		while(!Q2.empty()) {
			res1[Q2.front()] = 2;
			Q2.pop();
		}
		for(long long unsigned int i = 0; i < str.size(); i++) {
			if(res1[i] == 0) res.insert(res.end(), ' ');
			else if(res1[i] == 1) res.insert(res.end(), '$');
			else if(res1[i] == 2) res.insert(res.end(), '?');
		}
		cout << str << endl << res << endl;
		res.clear();
		res1.fill(0);
	}
}

C

#include <stdio.h>

int main() {
    char str[100], res[100];
    int res1[100];
    while(gets(str) && str[0]) {
        for(int i = 0; i < 100; i++) res1[i] = 0;
        for(int i = 0; i < 100; i++) res[i] = '\0';
        int S[100], Q2[100], top = -1, front = -1;
        for(int i = 0; str[i]; i++) {
            if(str[i] == '(') S[++top] = i;
            else if(str[i] == ')') {
                if(top >= 0) top--;
                else Q2[++front] = i;
            }
        }
        for(int i = 0; i <= top; i++) res1[S[i]] = 1;
        for(int i = 0; i <= front; i++) res1[Q2[i]] = 2;
        for(int i = 0; str[i]; i++) {
            if(res1[i] == 0) res[i] = ' ';
            else if(res1[i] == 1) res[i] = '$';
            else if(res1[i] == 2) res[i] = '?';
        }
        printf("%s\n%s\n", str, res);
    }
}

标签:匹配,int,res,res1,扩号,括号,str,100,OpenJudge
From: https://blog.csdn.net/qq_21739599/article/details/140670021

相关文章

  • rust 初探 -- 枚举和模式匹配
    rust初探–枚举和模式匹配定义枚举enumIpAddrKind{//将数据附加到枚举的变体中//-不需要额外使用struct//-每个变体可以拥有不同的类型以及关联的数据量V4(String),V6(String),}可以使用impl为枚举定义方法enumIpAddrKind{......
  • 从excel列表读取图片,上传并匹配--基于03版
    主要思路:1.读取所有图片,先传到服务器本地,用row行编号命名图片名称.2.传到图片服务器,获取图片url3.与excel其它数据行匹配---------------不知为啥首尾两行不进去的分割线------------------------------publicvoidimportExcel(MultipartFilefiles)throwsException......
  • 游戏中的组队匹配机制是如何设计?
    在游戏中,组队匹配机制是一种常见的玩法,它允许玩家们通过组队来增强游戏体验。这种机制的设计需要考虑到各种因素,包括玩家的技能水平、游戏难度、队伍规模等,接下来探讨这种机制的设计过程。1.玩家能力评估首先,设计者需要了解每个玩家的能力,这包括他们的技能水平、角色等级、装备......
  • 你能对 Python 类型注释进行模式匹配吗?
    你能在Python类型上进行模式匹配吗?我见过简单的例子:importbuiltinsmatchx:casebuiltins.str:print("matchedstr")casebuildins.int:print("matchedint")但我想在嵌套类型上进行模式匹配,比如Annotated[Optional[Literal["a",......
  • Python函数获取匹配和错误记录
    我有一个以下格式的json文件:[{"type":"BEGIN","id":"XYZ123"},{"type":"END","id":"XYZ123",},{"type":&......
  • 【Python正则表达式】:文本解析与模式匹配
    文章目录1.正则表达式2.re模块3.修饰符3.元字符3-1字符匹配元字符3-2重复次数限定元字符3-3字符集合匹配元字符3-4分组元字符3-5边界匹配元字符3-6字符类别匹配元字符4.技巧4-1贪婪与非贪婪5.案例1.正则表达式正则表达式面向什么样的问题?1、判断一个字......
  • 使用 Open3D 点云到 RGB 图像转换中的颜色不匹配和深度不一致
    我正在使用Open3D将点云数据转换为RGB图像。但是,我遇到了输出图像中的颜色与输入点云中的颜色不匹配的问题。此外,本应位于背景的点却出现在前景中。这是我的代码的相关部分:importnumpyasnpimportcv2classProjector:def__init__(self,cloud)->None:......
  • JAVA:正则表达式匹配
    1.非捕获组(?:)/***根据正则表达式找到字符串中符合条件的字符段,并输出到控制台*/publicstaticvoidmatch(Stringregex,Stringstr){Patternpattern=Pattern.compile(regex);Matchermatcher=pattern.matcher(str);while(matcher.find()){Syste......
  • OpenJudge | 点评赛车
    总时间限制:1000ms内存限制:65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的;2)B说:4号赛车是最好的;3)C说:3号赛车不是最好的;4)D说:B说错了。事实上只有1款赛车最佳,且只有1名专家说对了,其他3人都说错了。请编程输出最佳车的车号,以及说对的专家。输入无输入......
  • InvalidDimensionException:嵌入维度 384 与集合维度 1536 不匹配
    我正在Chromadb上编写python代码来创建矢量数据库我尝试在chromadb中创建包含嵌入的集合。在使用包括嵌入的矢量数据库创建索引期间,我面临这个问题出现错误信息“InvalidDimensionException:嵌入维度384与集合维度1536不匹配”的原因是,你正尝试将维度为384的......