括号匹配算法

来源:互联网 发布:电话销售数据 编辑:程序博客网 时间:2024/06/06 23:55
bool IsBracket(char ch){if(ch == '(' || ch == '[' || ch == '{' || ch == ')' || ch == ']' || ch == '}'){return true;}return false;}bool MatchBracket(char* str, size_t size){int idx = 0;stack<char> s;for(idx = 0;idx <= size; idx++){if(!IsBracket(str[idx]))  {  str[idx+1];  continue;  }if(str[idx] == '(' || str[idx] == '[' || str[idx] == '{'){s.push(str[idx]);continue;}if(str[idx] == ')' || str[idx] == ']' || str[idx] == '}'){if(s.empty() == 1){   cout<<"右括号多于左括号"<<endl;       return false;}else{char con = s.top();if((str[idx] == ')'&&con == '(' )|| (str[idx] == ']'&&con== '[') || (str[idx] == '}'&&con=='{'))      {      s.pop();      }    else{cout<<"匹配不正确"<<endl;return false;}}}}    if(s.empty() == 1){cout<<"匹配成功"<<endl;return true;}else{cout<<"左括号多于右括号"<<endl;return false;}}int main(){       char* str1 = "{(})[]";char* str2 = "{}())[]";char* str3 = "a[]b";char* str4 = "{()[]";int size1 = strlen(str1);int size2 = strlen(str2);int size3 = strlen(str3);int size4 = strlen(str4);MatchBracket(str1, size1);MatchBracket(str2, size2);MatchBracket(str3, size3);MatchBracket(str4, size4);system("pause");return 0;}

运行结果


0 0
原创粉丝点击