题目1153:括号匹配有关问题

题目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