夜茫茫 重寻无处 觉来小园行遍

常被此花相恼 思共老 结屋中间

括号匹配

#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;
}

阅读更多
上一篇堆排序
下一篇C++ Primer Plus (第五版) 的点滴记录
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭