栈应用:括号匹配
1:普通字符串括号匹配
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool mat(char,char);
int if_match(string);
int main(){string a;cin>>a;cout<<if_match(a)<<endl;return 0;
}
bool mat(char a,char b){if(a=='(')return b==')';if(a=='[')return b==']';if(a=='{')return b=='}';return 0;
}
int if_match(string input){//返回第一个不匹配的位置stack<char> t;int il=input.length();for(int i=0;i<il;i++){if(input[i]=='('||input[i]=='['||input[i]=='{'){t.push(input[i]);}else if(input[i]==')'||input[i]==']'||input[i]=='}'){if(t.empty()==true){return i;}if(!mat(t.top(),input[i])){return i;}else {t.pop();}}}if(t.empty())return -1;else return il-1;
}
2:仅适用于/**/,几种括号纯字符串的检测
输入:仅包含'('、')'、'['、']'、'{'、'}'、/、*的字符串
输出:若匹配输出“Yes”,
若不匹配输出“No”。
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool mat(char,char);
bool if_match(string);
int main(){string a;cin>>a;if(if_match(a)){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}return 0;
}
bool mat(char a,char b){if(a=='(')return b==')';if(a=='[')return b==']';if(a=='{')return b=='}';return 0;
}
bool if_match(string input){///*==<,*/==>stack<char> t;int il=input.length();for(int i=0;i<il;i++){//cout<<i<<' '<<(t.empty()?'?':t.top())<<endl;if(i<il-1){if(input[i]=='*'&&input[i+1]!='/'){return 0;}if(input[i]=='/'&&input[i+1]!='*'){return 0;}if(input[i]=='/'&&input[i+1]=='*'){t.push('<');i++;}if(input[i]=='*'&&input[i+1]=='/'){if(t.empty()==true){return 0;}if(t.top()=='<'){t.pop();i++;}else {return 0;}}}else{if(input[i]=='*'||input[i]=='/')return 0;}if(input[i]=='('||input[i]=='['||input[i]=='{'){t.push(input[i]);}else if(input[i]==')'||input[i]==']'||input[i]=='}'){if(t.empty()==true){return 0;}if(!mat(t.top(),input[i])){return 0;}else {t.pop();}}}return t.empty();
}