1. 程式人生 > >多括號匹配——棧的應用

多括號匹配——棧的應用

EOF    ctrl+z    停止

        EOF為計算機術語End Of File的縮寫。在作業系統中表示資料源無更多的資料可讀取。資料源通常稱為檔案或串流。在C標準庫中,像getchar這樣的資料讀取函式返回一個與符號(巨集)EOF相等的值來指明檔案結束的情況發生,EOF的真實值與不同的平臺有關(但通常是-1,比如在glibc中),並且不等於任何有效的字元程式碼。塊讀取函式返回讀取的位元組數,如果它小於要求讀取的位元組數,就會出現一個檔案結束符。

“test.cpp”

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

bool Match(char c1,char c2)
{
	if ((c1 == '{') && (c2 == '}'))
	{
		return true;
	} 
	else if ((c1 == '[') && (c2 == ']'))
	{
		return true;
	}
	else if ((c1 == '(') && (c2 == ')'))
	{
		return true;
	}
	else
	{
		return false;
	}
}


void test()
{
	stack<char> s;
	char c = '0';
	while ((c = getchar()) != EOF)
	{
		switch(c)
		{
		case '{':
		case '[':
		case '(':
			{
				s.push(c);
			}
			break;

		case '}':
		case ']':
		case ')':
			{
				if (s.empty())
				{
					cout<<"已有右括號不匹配"<<endl;
					return;
				}				
				if (Match(s.top(),c))
				{
					s.pop();
				}
			}
			break;
		default:
			break;
		}
	}
	if (s.empty() == false)
	{
		cout<<"左括號多餘"<<endl;
	}
	else
	{
		cout<<"括號匹配"<<endl;
	}
}

int main()
{
	test();
	system("pause");
	return 0;
}

測試用例