括号匹配

原创 2013年12月02日 20:18:59
#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++括号匹配

  • 2014-12-05 15:26
  • 168KB
  • 下载

关于高亮显示括号匹配的算法(delphi)

环境: SynEdtor控件 + delphi 匹配括号的算法:传入参数 APoint: TBufferCoord; const Brackets: array[0..7] of char =...

括号匹配程序

  • 2013-10-10 14:41
  • 210KB
  • 下载

括号匹配问题

  • 2011-12-24 14:31
  • 69KB
  • 下载

【c语言】检查大括号匹配

用c语言检查代码中的大括号是否匹配 #include int main() {  int ch;  int count=0;  while((ch = getchar())!= EOF)  //判断...

括号匹配C程序

括号匹配问题

括号匹配问题 问题描述: 括号的匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉. 例如: ..(..[..]..).. 是匹配的 ..(..[..)..].. ...

栈实现括号匹配算法

  • 2012-03-20 19:25
  • 938B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)