C++ STL stack 括号匹配 源代码
2018-01-30 16:50
387 查看
// STL_stack.cpp : 定义控制台应用程序的入口点。 // STL 栈stack #include "stdafx.h" #include <iostream> #include <stack> #include <map> #include <string> #include <time.h> using namespace std; multimap<char, char> match; multimap<char, char> trueMatch; typedef pair<multimap<char, char>::iterator, multimap<char, char>::iterator> pairItr; stack<char> st; void initMatch(){ /* \ ( [ { } ] ) ( 2 2 2 0 0 1 [ 2 2 2 0 1 0 { 2 2 2 1 0 0 } 0 0 1 0 0 0 ] 0 1 0 0 0 0 ) 1 0 0 0 0 0 */ match.insert(make_pair('(', ')')); match.insert(make_pair('(', '[')); match.insert(make_pair('(', '{')); match.insert(make_pair('(', '(')); match.insert(make_pair('[', ']')); match.insert(make_pair('[', '(')); match.insert(make_pair('[', '[')); match.insert(make_pair('[', '{')); match.insert(make_pair('{', '}')); match.insert(make_pair('{', '{')); match.insert(make_pair('{', '[')); match.insert(make_pair('{', '(')); match.insert(make_pair(')', '(')); match.insert(make_pair(']', '[')); match.insert(make_pair('}', '{')); /*---------------------------*/ trueMatch.insert(make_pair('(', ')')); trueMatch.insert(make_pair(')', '(')); trueMatch.insert(make_pair(']', '[')); trueMatch.insert(make_pair('[', ']')); trueMatch.insert(make_pair('{', '}')); trueMatch.insert(make_pair('}', '{')); } bool isMatch(char ch){ if (st.empty()){ st.push(ch); return true; } pairItr pair = match.equal_range(st.top()); bool isExit = true; for (auto itr = pair.first; itr != pair.second;itr++) { if ((*itr).second == ch){ isExit = false; break; } } if (isExit){ return false; } if(trueMatch.find(st.top()) != trueMatch.end() && (*trueMatch.find(st.top())).second == ch){ st.pop(); return true; } st.push(ch); return true; } int _tmain(int argc, _TCHAR* argv[]) { clock_t begin_clock_t = clock(); initMatch(); //最糟糕情况 匹配情况 最后一位不匹配 //string str = "([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])["; string str = "([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])([{}])"; for (auto var = str.begin(); var != str.end();var++) { if(!isMatch(*var))break; } if (st.empty()){ cout << "----------匹配-----------" << endl; } else{ cout << "不匹配" << endl; } clock_t end_clock_t = clock(); cout << double(end_clock_t - begin_clock_t) / CLOCKS_PER_SEC * 1000 << "ms" << endl; getchar(); return 0; }
相关文章推荐
- 【C++】括号匹配问题与逆波兰表达式
- 顺序表c++数据结构实验之栈四:括号匹配
- [C++]连续最长括号匹配问题解决策略二(学习)
- C/C++数据结构通过顺序栈实现括号()匹配算法
- C++ Stack Application - (Parenthesis Matching) 堆栈应用之"括号匹配"
- 用C++链式栈解决数据结构中的括号匹配问题。
- 算法学习 - 括号匹配(栈实现)C++
- C++ 字符串删除匹配括号及括号里的内容
- 栈的应用--括号匹配的检验(C++)
- C++学习之:括号匹配与栈的使用
- 括号匹配问题(C++、堆栈)
- c++ 括号匹配
- c++STL的stack的应用之括号匹配
- 括号匹配 栈 c++
- C++实现算术表达式的括号匹配
- [C++]连续最长括号匹配问题
- [C++]连续最长括号匹配问题解决策略二(学习)
- 数据结构(18)栈典型问题之C++实现括号匹配
- 括号匹配简易C++实现
- C++:泛型编程stack(括号匹配)