括号匹配所用算法:
核心:
遍历整个字符串,若遇到了左括号,将其下标进栈;若遇到了右括号,则将栈顶元素出栈
(根据后进先出,栈顶元素即为与当前括号匹配的括号),若栈空,则无括号与当前括号匹配。
当遍历一遍后,若栈中还有元素,则说明左括号多,无右括号与其匹配。
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int maxLength 100; // 最大字符串长度
void PrintMatchPairs(char *expressions)
{
stack <int> S(maxLength);//建一个栈用于存储括号在数组中的下标
int length=strlen(expressions);//计算出字符串的长度
int j;//出栈时用来保存栈顶元素
for(int i=0;i<length;i++)
{
if(expressions[i]=='(')
S.push(i);
else if(expressions[i]==')')
{
if(S.empty()==false)
{
j=S.top();
S.pop();
cout<<"第"<<i+1<<"与第"<<j+1<<"匹配"<<endl;
}
else
cout<<"没有与第"<<i+1<<"个右括号相匹配的左括号"<<endl;
}
}
while(S.empty()==false)
{
j=S.top();S.pop();
cout<<"没有与第"<<j+1<<"个左括号相匹配的右括号"<<endl;
}
}
}