码迷,mamicode.com
首页 > 其他好文 > 详细

题目1153:括号匹配问题

时间:2015-06-29 10:08:04      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:online judge   九度   c++   java   

题目描述:

    在某个字符串(长度不超过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



题目1153:括号匹配问题

标签:online judge   九度   c++   java   

原文地址:http://blog.csdn.net/carvin_zh/article/details/46675607

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!