关闭

括号匹配

320人阅读 评论(0) 收藏 举报
#include <iostream>
#include <stack>
#include <cassert>
#include <iomanip>
using namespace std;
//定义输出字符宽度
const int SETWIDTH = 1;
//定义字符串长度
const int EXPRESSION_LENTH = 100;
void PrintMatchedPairs(char* expression);
bool CheckPairs(char* expression);
int main()
{
	char* charexp = new char[EXPRESSION_LENTH];
	cout << "(括号匹配检测)请输入你的表达式,小于100个ASCII字符,以0开始计数" << endl;
	cin >> charexp;
	PrintMatchedPairs(charexp);
	cin.get();
	cin.get();
}


//判断括号匹配,并且输出匹配的括号与没有匹配的括号
void PrintMatchedPairs(char* expression)
{
	stack<int> str; //创建栈
	int i ;
	//检查是否输入括号
	while (CheckPairs(expression) == false)
	{
		char a;
		cin >> a;
		if (a == 'q')
			break;
		cin >> expression;
	}
	int length = strlen(expression); // 获取字符串的长度
	if (CheckPairs(expression) == true) //判断括号匹配并且输出结果
	{
		for (i = 0; i < length; i++)
		{
			if (expression[i] == '(')  //如果字符为左括号
				str.push(i);
			else if (expression[i] == ')'&& !str.empty()) // 如果字符为右括号且栈不为空
			{
				cout << " 第 " << setw(SETWIDTH) << str.top() << " 个与第 " << setw(SETWIDTH) << i << "个相匹配 " << endl;
				str.pop();
			}
			else if (expression[i] == ')'&& str.empty()) // 如果字符为右括号且栈为空
				cout << setw(SETWIDTH)<< i << "不相匹配 " << endl;
		}

		while (!str.empty()) //当栈不为空时
		{
			cout << " 第 " << setw(SETWIDTH) << str.top() << "个不匹配 " << endl;
			str.pop();
		}
	}	
}

//检查是否输入括号的函数
bool CheckPairs(char* expression)
{
	int length = strlen(expression);
	for (int i = 0; i < length; i++)
	{
		if (expression[i] == '(' || expression[i]== ')')
			return true;
	}
	cout << "大姐,没有输入含有括号的表达式,请重新输入,或着按q退出:";
	cout << endl;
	return false;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场