理论原理:
本博客采用的是STL中的栈,各位小伙伴在明白原理后可以使用自己书写的栈去实现。
代码实现:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
struct MyChar
{
char c;
int index;
MyChar(char c,int index);
};
MyChar::MyChar(char c,int index)
{
this->c=c;
this->index=index;
}
//输出匹配错误的位置
void printError(int index)
{
for(int i=0;i<index;i++)
cout<<" ";
cout<<"A"<<endl;
}
int main()
{
stack<MyChar> st;
string s="1+3)+((8+9)*7+(+6*7";
cout<<s<<endl;
for(int i=0;i<s.size();i++)
{
//如果为左括号入栈
if(s.at(i) == '(')
{
MyChar myChar(s.at(i),i);
st.push(myChar);
}
//如果为右括号先判断栈是否为空,再进行匹配
if(s.at(i) == ')')
{
if(st.size()==0)
{
printError(i);
}
else
{
//由于只有左括号才能进栈故只要栈不空,必与')'匹配成功
st.pop();
}
}
}
//检查栈内是否有剩余的 '('
while (st.size()>0)
{
MyChar top=st.top();
printError(top.index);
st.pop();
}
return 0;
}
运行结果: