思路:
1. 括号匹配的四种可能性:
①左右括号配对次序不正确②右括号多于左括号
③左括号多于右括号
④左右括号匹配正确
2. 算法思想:
1.顺序扫描算数表达式(表现为一个字符串),当遇到左括号时候让该括号保存至list;
2.当扫描到右括号时,查看当前list里面是否有内容,若为空,说明格式不对,返回错误标识。如果有内容,则弹出list末尾元素;
3.字符串循环扫描结束时,若list非空(即list中尚有左括号),则说明左括号多于右括号,匹配失败。若list为空,说明左右括号格式正确,返回正确标识;
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <list>
using namespace std;
bool CheckBrackets(char *str)
{
list<char> lChar;
int nStrLen = strlen(str);
for (int i = 0;i < nStrLen; i++)
{
if (str[i] == '(')
{
lChar.push_back(str[i]);
}
if (str[i] == ')')
{
if (lChar.empty())
return false;
lChar.pop_back();
}
}
if (lChar.empty())
return true;
return false;
}
int main(int argc, char* argv[])
{
char str[] = "(aaaa(bbbbb)(cccc)dddd)";
bool bRet = CheckBrackets(str);
if (bRet)
printf_s("字符串中括号格式正确!\n");
else
printf_s("字符串中括号格式错误!\n");
system("pause");
return 0;
}