有个问题是要匹配资格字符串中的左右括号,如(a*(b+c)+d)在位置1和4有左括号,在位置8和11有右括号。可以观察到如果从右向左扫描,那么每个右括号都与最近遇到的那个未匹配的左括号相匹配。现在直接上代码
void Match(char* str)
{
stack<int> s;
int lengh = strlen(str);
for(int i=0;i<lengh;i++)
{
if(str[i]=='(')
s.push(i);
else if(str[i]==')')
{
if(!s.empty())
{
int nLeft = s.top();
s.pop();
cout<<"right and left is:"<<i<<" "<<nLeft<<endl;
}
}
}
}