括号匹配

原创 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
  • 下载

字符匹配 与 中括号表达式

句点 (.) 匹配字符串中的各种打印或非打印字符,只有一个字符例外。这个例外就是换行符 (\n)。下面的正则表达式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:...
  • lvjayj
  • lvjayj
  • 2014年09月10日 22:15
  • 911

括号匹配加表达式

  • 2014年11月16日 21:43
  • 2KB
  • 下载

括号匹配程序

  • 2013年10月10日 14:41
  • 210KB
  • 下载

【面试题】用栈解决括号匹配问题

思想:在表达式中,相同类型的括号(包括:()、[]、{})是成对出现的,并且当括号在表达式中嵌套时,不允许出现交叉现象。 检验括号匹配的方法,就是对给定的字符串依次检验:若是左括号,入栈;若是又括号...

括号匹配问题

  • 2011年12月24日 14:31
  • 69KB
  • 下载

括号匹配C程序

  • 2012年10月15日 16:16
  • 2KB
  • 下载

带优先级且不允许连续嵌套的括号匹配

题目描述:输入一个字符串比如{[(2+3)(1-3)] + 4}(14-3),分析它的括号使用是否正确 括号有三种,小括号(),中括号[],大括号{} 正确的括号使用必须满足以下条件(和数学上定义...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:括号匹配
举报原因:
原因补充:

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