自己写的一个单栈括号匹配,支持干扰字符
#include <iostream> #include "Stack.h" using std::string; using std::cout; using std::endl; /** * 检测字符串中的括号是否匹配 * @param str 待检测匹配的字符串 * @param tps1 匹配的符号 * @param tps2 与tps1相匹配且顺序一致的符号 * @return 括号是否匹配的布尔值 */ bool isPaired(string str, string tps1, string tps2); int main() { string s = "int main(){func(){while(true){cout << endl}}}"; //待检测字符串 string msg; msg = isPaired(s, "({[", ")}]") ? "OK" : "No"; cout << msg << endl; return 0; } bool isPaired(string str, string tps1, string tps2) { Stack<char> stack(str.length() / 2); //如果字符串中的括号匹配,最差情况下栈需要的长度等于字符串长度的一半 int tps_pos; char tmp; for (char i : str) { if (tps1.find(i) != -1) { //栈存储字符串中的左括号 if (stack.isFull()) return false; stack.push(i); } else if ((tps_pos = tps2.find(i)) != -1) { if (stack.isEmpty()) return false; stack.pop(tmp); if (tps1[tps_pos] != tmp) { //判断字符串的某一右括号字符对应匹配的左括号是否与当前pop出的元素是否一致 return false; } } } return stack.isEmpty(); //判断是否栈空,如果栈为空则说明匹配完毕,如果未空则说明有括号未匹配 }
好吧,这不是一个提问。只是一个代码片段分享,评论区不支持语法高亮就发问答区了。