本题实现求表达式中括号是否匹配。只需判断表达式中括号(本题中只会出现三种括号,分别是小括号,中括号和大括号)是否匹配,表达式中可以有其他值也可没有。
函数接口定义:
int match (char *exp);
其中 exp
为需判断括号是否正确的表达式,返回值为1或0,如果为1,则表示括号匹配,0表示不匹配。
裁判测试程序样例:
#include <stdio.h>
#define N 20
int match (char *exp);
int main()
{
char s[N];
int flag;
scanf("%s",s);
flag=match(s);
if(flag)
printf("%s match",s);
else
printf("%s not match",s);
return 0;
}
/* 请在这里填写答案 */
输入样例1:
{[2*(3+2)-7]}/4
输出样例1:
{[2*(3+2)-7]}/4 match
输入样例2:
{[()]}
输出样例2:
{[()]} match
代码实现:
#include <stdio.h>
#include <string.h>
int match(char *exp) {
char str[200], str2[200];
strcpy(str, exp);
int i = 0;
int flag = 0;
int fla = -1;
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == '[' || str[i] == '{' || str[i] == '(') {
str2[flag] = str[i];
flag++;
fla = flag - 1;
}
if (str[i] == ']' || str[i] == '}' || str[i] == ')') {
if (fla < 0 ||
(str[i] == ']' && str2[fla] != '[') ||
(str[i] == '}' && str2[fla] != '{') ||
(str[i] == ')' && str2[fla] != '(')) {
return 0;
}
flag--;
fla--;
}
}
return flag == 0;
}
学了栈我不用我就是玩