#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;
}
括号匹配
最新推荐文章于 2021-10-25 11:01:18 发布