有个问题是要匹配资格字符串中的左右括号,如(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;}}}}
新闻热点
疑难解答
图片精选