下题的程序流程题,怎么画,求帮忙,谢谢!
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
char Judge(char c)
{
if(c == ')') return '(';
if(c == ']') return '[';
if(c == '}') return '{';
return '0';
}
/**
* @brief
*
* @param s
* @return true
* @return false
*/
bool isValid(const char *s)
{
int len = strlen(s);
//奇数肯定不匹配
if(len%2 !=0 || len <= 0)
return false;
//创建栈
char *statck = (char *)malloc(sizeof(char) * len);
int statckPos = -1; // 栈的初始位置
while(*s!='\0'){
char c = *s;
if(c =='(' || c =='[' || c == '{'){
// 入栈
statck[++statckPos] = c;
}
else{
// 栈开始就是右括号也是不匹配(可能是字符串开头就是右括号也可能是中间处理遇到)
if(statckPos == -1)
return false;
char tmp = Judge(c);
if(statck[statckPos] != tmp)
return false;
//匹配的话栈就后退
statckPos--;
}
s++;
}
//走到这里判断完后看栈是否为空,如果为空就代表全部匹配
if(statckPos == -1)
return true;
return false;
}
int main(void)
{
bool ret = false;
const char *s = "()[]{}"; // 匹配
// const char *s = "(]"; // 不匹配
// const char *s = "([)]"; // 不匹配
// const char *s = "{[]}"; // 匹配
ret = isValid(s);
printf("%s\n",ret?"匹配":"不匹配");
return 0;
}