栈的典型实例问题——括号匹配

 1 //每一个右括号将与最近遇到的那个未匹配的左括号相匹配!!!
 2 #include<iostream>
 3 #include<stack>
 4 #include<string.h>
 5 using namespace std;
 6 const int maxLength=100;//最大字符串长度
 7 void PrintMatchedPairs(char*expression){
 8     stack<int> s;
 9     int length=strlen(expression);
10     int j;
11     for(int i=0;i<length;i++){
12         if(expression[i]=='(') s.push(i);//位置进栈
13         else if(expression[i]==')'){//右括号
14             if(!s.empty()){//栈不空
15                 j=s.top();//记录匹配的左括号位置 
16                 cout<<"左括号即第"<<j+1<<"个字符与右括号即第"<<i+1<<"个字符匹配成功"<<endl; 
17                 s.pop();//匹配成功,出栈
18             } 
19             else cout<<"没有与右括号即第"<<i+1<<"个字符匹配的左括号"<<endl; 
20         } 
21     }
22     while(!s.empty()){
23         j=s.top();
24         s.pop();
25         cout<<"没有与左括号即第"<<j+1<<"个符号相匹配的右括号"<<endl; 
26     }
27 }
28 int main(){
29     char a[10];
30     for(int i=0;i<10;i++) cin>>a[i];
31     PrintMatchedPairs(a);
32     return 0;
33 }

猜你喜欢

转载自www.cnblogs.com/TYXmax/p/10987761.html