java的括號匹配程序

利用棧進行的括號匹配程序

package zf;

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField;

public class fourth {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String input;
		while(true)
		{
			System.out.println("Error:missing right delimiter!");
			System.out.flush();
			input = getString();
			if(input.equals(""))
				break;
			BracketChecker theck = new BracketChecker(input);
			theck.check();
		}
		
	}

	private static String getString() throws IOException {
		// TODO Auto-generated method stub
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		String s = br.readLine();
		return s;
		//return null;
	}

	

}

class stack
{
	private int maxsize;
	private char [] stackarray;
	private int top;
	public stack(int s)
	{
		maxsize = s;
		stackarray = new char[maxsize];
		top = -1;
	}
	public void push(char c)
	{
		stackarray[++top] = c;
	}
	public char pop()
	{
		return stackarray[top--];
	}
	public char peep()
	{
		return stackarray[top];
	}
	public boolean isEmpty()
	{
		return (top==-1);
	}
	public boolean isFull()
	{
		return top==maxsize-1;
	}
}

class BracketChecker
{
	private String input;
	public BracketChecker(String in)
	{
		input = in;
	}
	public void check()
	{
		int stacksize = input.length();
		stack stk = new stack(stacksize);
		for(int j=0;j<input.length();j++)
		{
			char ch = input.charAt(j);
			switch(ch)
			{
			case '{':
			case '[':
			case '(':
				stk.push(ch);
				break;
			case '}':
			case ']':
			case ')':
				if(!stk.isEmpty())
				{
					char chx = stk.pop();
					if((ch=='}'&&chx!='{')||(ch==']'&&chx!='[')
							||(ch==')'&&chx!='('))
					{
						System.out.println("Error!"+ch+"at"+j);
					}
				}
				else
				{
					System.out.println("Error!"+ch+"at"+j);
				}
				break;
				default:
					break;
			}
		}
		if(!stk.isEmpty())
		{
			System.out.println("Error:missing right delimiter!");
		}
	}
}


發佈了105 篇原創文章 · 獲贊 10 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章