括号匹配——2017华为招聘机试题

来源:互联网 发布:查看centos系统版本 编辑:程序博客网 时间:2024/06/08 09:09

给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现,且嵌套关系正确。输出:true:代表括号成对出现并且嵌套正确,或字符串无括号字符,false:未正确使用括号字符。

分析:这个题目,如果有做过较多笔试题目的应该知道,简单的采用一个栈的特性,就能解决,左括号栈顶字符必须和第一个入栈的右括号字符匹配;
#include "stdafx.h"#include <stack>//直接用栈的特性来解答bool CheckCorrect(const char* v_sz){std::stack<char> st;int iLen = strlen(v_sz);for(int i = 0; i < iLen; ++i){if(v_sz[i] == '(' || v_sz[i] == '[' || v_sz[i] == '{'){st.push(v_sz[i]);}if(v_sz[i] == ')') //出现左括号,则此时栈顶为右括号则匹配{if(!st.empty() && st.top() == '('){st.pop();}else{return false;}}if(v_sz[i] == ']'){if(!st.empty() && st.top() == '['){st.pop();}else{return false;}}if(v_sz[i] == '}'){if(!st.empty() && st.top() == '{'){st.pop();}else{return false;}}}//栈空证明全部匹配完成,或未存在括号字符if(st.empty()){return true;}return false;}int _tmain(int argc, _TCHAR* argv[]){bool bRet = CheckCorrect("(1+1)/2");printf("CheckCorrect:%d\n", bRet == true ? 1 : 0);system("pause");return 0;}

原创粉丝点击