用stack实现检测字符串中(){}[]是否匹配
2012-06-20 07:32:59 来源:WEB开发网核心提示: 基本思路: for str 中的每个ch 如果 ch 是左字符 push() 如果 ch 是右字符 如果 stack 为空,肯定不匹配,用stack实现检测字符串中(){}[]是否匹配,退出 如果 stack 非空,若 top() 和 ch 不配对,若为空,匹配 不为空,那么肯定不匹配,退出最后检测stack是否为空
基本思路:
for str 中的每个ch
如果 ch 是左字符
push()
如果 ch 是右字符
如果 stack 为空,肯定不匹配,退出
如果 stack 非空,若 top() 和 ch 不配对,那么肯定不匹配,退出
最后检测stack是否为空,若为空,匹配
不为空,则不匹配。
注意特殊情况: 输入纯字符的情况
// match.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stack> #include <string> #include <iterator> #include <algorithm> bool is_right(char ch) { if (ch == ')' || ch == '}' || ch == ']') return true; else return false; } bool is_left(char ch) { if (ch == '(' || ch == '[' || ch == '{') return true; else return false; } bool is_pair(char left, char right) { if ((left == '(' && right == ')') || (left == '[' && right == ']') || (left == '{' && right == '}')) return true; else return false; } int main(int argc, char* argv[]) { string str; stack<char> m_char; cout << "Enter the string : " ; getline(cin, str); bool is_have_push_left = false; //主要是防止输入 huang 这样的情况 for (unsigned int i = 0; i < strlen(str.c_str()); i++) { char ch = str.at(i); if (is_left(ch)) { m_char.push(ch); is_have_push_left = true; } if (is_right(ch)) { if (m_char.empty()) break; char ch_top = m_char.top(); if (is_pair(ch_top, ch)) m_char.pop(); else break; } } if (m_char.empty() && is_have_push_left) cout << "match" << endl; else cout << "not match" << endl; return 0; }
更多精彩
赞助商链接