1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈
2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈
如果不匹配就直接结束程序(即括号匹配失败)
首先构建栈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
struct STACK { char num[10]; int top; }; struct STACK* creatstack() { struct STACK* stack = new struct STACK; assert (stack); stack->top = -1; //0 -1这些根据直接所习惯去标记栈顶 -1只是先置加 0后置加 return stack; } void push( struct STACK* stack, char ch) { stack->num[++stack->top] = ch; } void pop( struct STACK* stack) { stack->top--; } |
调用匹配函数
如果返回true即匹配成功 返回false即匹配失败
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
bool Match( struct STACK* stack, char * match) { int len = strlen (match); for ( int i = 0; i < len; ++i) { if (match[i] == '{' || match[i] == '[' || match[i] == '(' ) { push(stack, match[i]); } if (match[i] == '}' ) { if (stack->num[stack->top] == '{' ) { pop(stack); } else { return false ; } } if (match[i] == ')' ) { if (stack->num[stack->top] == '(' ) { pop(stack); } else { return false ; } } if (match[i] == ']' ) { if (stack->num[stack->top] == '[' ) { pop(stack); } else { return false ; } } } if (stack->top == -1) return true ; else { return false ; } } |
代码调用
如果是输出1说明匹配成功 输出0匹配不成功
1
2
3
4
5
6
|
int main() { struct STACK* stack = creatstack(); char str[10] = "()[][]{}" ; cout << Match(stack ,str)<< endl; } |
以上就是C语言堆栈括号匹配问题示例详解的详细内容,更多关于C语言堆栈括号匹配的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/weixin_56366633/article/details/121134957