#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "stdbool.h"
struct Match{
char val;
struct Match *head,*next;
int length;
}match;
void Push(char ch){
struct Match *new_list = (struct Match *)malloc(sizeof(struct Match));
new_list->val = ch;
if(match.length == 0){
match.head = new_list;
}
else{
new_list->next = match.head;
match.head = new_list;
}
match.length++;
}
char Pop(){
struct Match *temp = match.head;
match.head = match.head->next;
match.length--;
return temp->val;
}
bool Judge(char *str , int length){
int i;
char result;
for(i = 0 ; i < length ; i++){
if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
Push(str[i]);
}
else if(str[i] == ')' || str[i] == ']' || str[i] == '}'){
if(match.length == 0){
return false;
}
result = Pop();
switch(str[i]){
case ')' :
if(result != '('){
return false;
}
break;
case ']' :
if(result != '['){
return false;
}
break;
case '}' :
if(result != '{'){
return false;
}
}
}
}
return true;
}
int main(){
printf("请输入想要匹配的字符串(小于1000个字符):");
//比如(123【465{798}】)
char str[1000];
int length;
bool A;
gets(str);
length = strlen(str);
A = Judge(str , length);
if(match.length != 0){
printf("不匹配!");
}
else{
if (A == true) {
printf("匹配!");
} else {
printf("不匹配!");
}
}
return 0;
}
栈的应用——括号匹配(C语言)
最新推荐文章于 2024-05-07 10:32:58 发布