#include <iostream>
using namespace std;
#include <set>
#include <string>
// isPairedPareshis 判断是否成对出现的括号 str 输入的字符串
bool isPairedPareshis(std::string str) {
std::string::iterator it;
// 构建multiset对象,用于存储char字符
std::multiset<char> s;
// 标志位,是否是成对出现
bool isPaired = true;
std::multiset<char>::iterator sit;
// 逐字符遍历
for(it=str.begin();it!=str.end(); it++) {
// 遇到左括号进行插入
if((*it == '(') || (*it == '[')) {
s.insert(*it);
// 如果遇到右括号
}else if(*it==')') {
// 查找set里面是否有左括号,如果没有,说明挂了
sit = s.find('(');
if(sit == s.end()) {
isPaired = false;
break;
// 否则擦除掉左括号,重新开始配对
}else {
s.erase(sit);
}
// 如果遇到右中括号
}else if(*it==']') {
// 查找set里面是否有左中括号,如果没有,说明挂了
sit = s.find('[');
if(sit == s.end()) {
isPaired = false;
break;
// 否则擦除掉左中括号,重新开始配对
}else {
s.erase(sit);
}
}
}
// 如果完事儿容器里面还有元素,说明有元素没配对上
if(s.size()>0) {
isPaired = false;
}
return isPaired;
}
int main() {
// 需要判断的字符串
std::string str = "[()[]]";
// 是否成对出现的括号
bool isPaired = isPairedPareshis(str);
// 打印输出结果
std::cout << "是否成对的括号: " << isPaired << std::endl;
std::cout << "请按任意键继续..." << std::endl;
getchar();
return 0;
}
程序输出如下,
图片.png
网友评论