c语言实现括号匹配检测

c语言实现括号匹配检测

#include
#include
#include
typedef struct bracketStack {
	char data;
	bracketStack* next;
	int quenesize;
	//初始化函数
	void InitQuene(bracketStack*& Q);
	//弹出
	bool pop(bracketStack*& Q, char& e);
	//压入
	bool push(bracketStack*& Q, char e);
}*Bracket;

void bracketStack::InitQuene(bracketStack*& Q) {
	Q = NULL;
}
bool bracketStack::pop(bracketStack*& Q, char& e) {
	if (!Q)return false;
	Bracket p = Q;
	e = Q->data;
	Q = Q->next;
	free(p);
	return true;
}
bool bracketStack::push(bracketStack*& Q, char e) {
	Bracket q = (Bracket)malloc(sizeof(bracketStack));
	if (!q)return false;
	q->data = e;
	q->next = Q;
	Q = q;
	return true;
}

static std::string getBracket() {
	std::string AllBracket;
	std::cout << "请输入所要检查的括号表达式" << std::endl;
	bool psw = false;
		do {
			std::cin >> AllBracket;
			psw = false;
			for (auto i : AllBracket) {
				if ((int)i==40||(int)i==41||(int)i==91||(int)i==93) continue; 
				std::cout << "请重新输入括号表达式!!!" << std::endl;
				psw = true;
				break;
			}
		} while (psw);
		return AllBracket;
}
static bool Juage(std::string allbracket,Bracket Bstack) {

	//主方法
	char alone;
	for (auto i : allbracket) {
		if (i == '(' || i == '[')Bstack->push(Bstack, i);
		else if (i == ')') {
			if (!Bstack->pop(Bstack, alone))return false;
			if (alone == '(')continue;
			else { return false; }
		}
		else if (i == ']') {
			if (!Bstack->pop(Bstack, alone))return false;
			if (alone == '[')continue;
			else { return false; }
		}
	}
	if (Bstack == NULL)return true;
	else
	{	return false;}
}
int main(){
	//初始化一个栈
	Bracket Bstack;
	Bstack->InitQuene(Bstack);
	//从用户接受数据
	std::string  allbracket = getBracket();
	
	if (Juage(allbracket, Bstack))
		std::cout << "匹配" << std::endl;
	else	{ std::cout << "此串括号匹配不合法" << std::endl; }
	
	return 0;

}

你可能感兴趣的:(c语言实现括号匹配检测)