题目1153:括号匹配问题

题目描述:

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

输入:

输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。

注意:cin.getline(str,100)最多只能输入99个字符!

输出:

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

样例输入:
)(rttyy())sss)(
样例输出:
)(rttyy())sss)(
?            ?$

C++代码:

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

int main()
{
	stack<char>s;
	char result[101];
	char str[101];
	while(cin.getline(str,101))
	{
		int i;
		cout<<str<<endl;   //Êä³ö½á¹û
		for(i=0;str[i]!='\0';i++)
		{
			if('('==str[i])
			{
				s.push('(');
				result[i]=' ';
			}//if
			else if(')'==str[i])
			{
				if(s.empty())
					result[i]='?';
				else
				{
					s.pop();
					result[i]=' ';
				}//else
			}//else if
			else
				result[i]=' ';     //ÊÇ×ÖĸµÄ»°£¬´òÓ¡¿Õ¸ñ
		}//for
		//µ½ÕâÀïÖ»ÊÇÍê³ÉÁ˶ԡ°£©¡±ÓÒÀ¨ºÅµÄÌæ»»
	//	cout<<result<<endl;
		result[i]='\0';
		int j=0;
		while(!s.empty())
		{
			i--;
			if(str[i]==')')
				j++;
			if('('==str[i])
			{
				if(0==j)
				{
					result[i]='$';
					s.pop();
				}//if
				else
				{
					j--;
				}//else
			}//if
		}//while
		cout<<result<<endl;
	}//while
	return 1;
}

Java代码:

package oj1153;

import java.util.Scanner;
import java.util.Stack;

public class Main{
	public static void main(String args[]){
		//Vector<Character> s = null;
		Stack<Character> s=new Stack<>();
		Scanner in=new Scanner(System.in);
		char [] result=new char[101];
		while(in.hasNext()){
			s.clear();
			String str=in.nextLine();   //获取输入数据
			System.out.println(str);
			char temp[]=str.toCharArray();
			int i=0;
			for(;i<temp.length;i++){
				if('('==temp[i]){
					s.push('(');
					result[i]=' ';
				}//if
				else if(')'==temp[i]){
					if(s.empty()){
						result[i]='?';
					}//if
					else{
						s.pop();
						result[i]=' ';
					}//else
				}//else if
				else
					result[i]=' ';
			}//for
			int j=0;
			while(!(s.empty())){
				i--;
				if(')'==temp[i])
					j++;
				if('('==temp[i]){
					if(0==j){
						result[i]='$';
						s.pop();
					}
					else {
						j--;
					}
				}//if
			}//while
			System.out.println(result);
		}//while
	}//main
}//Main
时间: 2024-08-26 00:57:09

题目1153:括号匹配问题的相关文章

题目1153:括号匹配问题(栈的使用)

题目链接:http://ac.jobdu.com/problem.php?pid=1153 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus // // 1153 括号匹配问题.cpp // Jobdu // // Created by PengFei_Zheng on 08/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdio.h>

华为笔试——C++括号匹配

题目:括号匹配 题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908 题目介绍:输入一个字符串,里面可能包含"()"." [  ] "." {  } "三种括号,要求程序判断这个字符串里的括号是否成对出现且嵌套关系正确,若成对出现且嵌套关系正确,或字符串中无括号出现时,输出True:否则输出False.无需考虑非法输入. 例: 输入: (1+4)/[(2+3)*4] 输出:

题目1153:括号匹配问题(栈的应用)

题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6726 解决:2926 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注. 输入: 输入包括多组数据,每组数据一行,包含一

九度oj题目1153:括号匹配问题

题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4866 解决:2112 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注. 输入: 输入包括多组数据,每组数据一行,包含一

九度oj 题目1153:括号匹配问题

题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注. 输入: 输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100.    注意:cin.getline(str,10

华为上机练习题--括号匹配检测

题目: 输入一串字符串,其中有普通的字符与括号组成(包括'('.')'.'[',']'),要求验证括号是否匹配,如果匹配则输出0.否则输出1. Smple input:dfa(sdf)df[dfds(dfd)]    Smple outPut:0 分析: 类似于括号字符匹配这类的问题, 我们可以模拟栈的操作来进行验证, 这样问题就简单了, 就是栈的操作 代码如下: package com.wenj.test; import java.util.ArrayList; import java.uti

括号匹配为题(栈的思想)哈

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出“yes”,不匹配输出“no” 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 我的分析:运用栈的思想,读到左边的括号,就把它推进

POJ 2955 Brackets (区间dp 括号匹配)

Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3951   Accepted: 2078 Description We give the following inductive definition of a "regular brackets" sequence: the empty sequence is a regular brackets sequence, if s is a reg

数据结构笔记之——括号匹配(栈的应用之一)(SDOJ 2134)

//  度过了上周的悲催状态,我决定好好学习了-- //书上括号匹配是栈的简单应用,正好在SDOJ上看到这道题,顺便做了下 题目地址:SDOJ 2134 数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出