条件
给定一个只包括 '(',')','{','}','[',']'
的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
代码
void bracketmatch(){
char *str = (char*)malloc(sizeof(char)*10);
printf("请输入要匹配的括号组:");
fflush(stdout);//清空输出缓冲区(否则我上面打印不出来)
scanf("%s", str);
int len = 0;
char *bakstr = str;
while (*bakstr++ != '\0')//获取字符串长度
len++;
if (len % 2 != 0) exit(0);//字符串长度为奇数,不可能配对
int i = 0;
Stack S;
InitStack(S);
while (str!=NULL && *str != '\0'){
if (*str=='[' || *str=='(' || *str=='{'){//如果是左括号就入栈
Push(S, *str);
str++;
}
else{
if (
(S.top == -1) || //都为右括号,不可能配对
(*str==']' && getTop(S)!='[') ||
(*str==')' && getTop(S)!='(') ||
(*str=='}' && getTop(S)!='{')
){
printf("括号组不合法!\n");
return;
}
else{
ELEMTYPE e;
Pop(S, e);//匹配成功一对,出栈一次
str++;
}
}
}
if (S.top==-1)//括号组遍历完后,栈必须已空
printf("括号组合法!\n");
else
printf("括号组不合法!\n");
}
测试
int main(){
for (int i = 0; i < 5; i++)//测试五种情况
bracketmatch();
return 0;
}