自己写的一个单栈括号匹配,支持干扰字符
#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(); //判断是否栈空,如果栈为空则说明匹配完毕,如果未空则说明有括号未匹配
}好吧,这不是一个提问。只是一个代码片段分享,评论区不支持语法高亮就发问答区了。