判断字符串中的括号是否匹配-C语言
栈实现:
将字符逐个取出,若遇到左括号,则进栈;若遇到右括号,这时侯栈为空的话括号就不匹配,不为空,则出栈,并判断左括号与右括号是否对;当字符串判断完后,栈应为空,否则括号不匹配。栈是一种后进先出的数据结构,相关知识请自行百度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACKLENGTH 1024
char stack[STACKLENGTH];
int top = STACKLENGTH;
/*判断栈是否为空*/
int empty(){
if(top == STACKLENGTH)
return 1;
return 0;
}
/*进栈*/
void push(char ch)
{
top--;
stack[top] = ch;
}
/*出栈*/
char pop()
{
char ch = stack[top];
top++;
return ch;
}
int fun(char *str)
{
while(*str != '\0')
{
char chLeft = '\0';
char chRight = '\0';
char ch = *str;
switch(ch)
{
case '(':
case '[':
case '{':
push(ch); // 找到左括号 进栈
break;
case ')':
chLeft = '(';
chRight = ch;
break;
case ']':
chLeft = '[';
chRight = ch;
break;
case '}':
chLeft = '{';
chRight = ch;
break;
default:
break;
}
if(chRight == ch) // 找到右括号
{
if(empty())
{
return 0;
}
else
{
char t = pop(); // 出栈
if(t != chLeft){
return 0;
}
}
}
str++;
}
if(empty())
{
return 1;
}
return 0;
}
int main(void)
{
char array[1024];
gets(array);
int i = fun(array);
if(i == 1){
printf("括号匹配!\n");
}else{
printf("括号不匹配!\n");
}
return 0;
}
- 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
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94