![]()
/*
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct Stack{
int top;
char index[1000];
};
/*入栈*/
void stack_push(char e,struct Stack *stack){
stack->top++;
stack->index[stack->top]=e;
}
/*出栈*/
void stack_pop(struct Stack *stack){
stack->top--;
}
/*栈顶*/
char stack_top(struct Stack *stack){
return stack->index[stack->top];
}
/*是否为空*/
bool stack_empty(struct Stack *stack){
if(stack->top==-1)
return 1;
return 0;
}
bool isValid(char * s){
int i=0;
char c;
struct Stack *stack;
stack=(struct Stack*)malloc(sizeof(struct Stack));
stack->top=-1;
if(s==NULL||s[i]=='\0')
return true;
while(s[i]!='\0'){
if(s[i]=='('||s[i]=='{'||s[i]=='['){
stack_push(s[i],stack);
}else{
c=stack_top(stack);
//printf("%c ",c);
switch(s[i]){
case ')':
stack_pop(stack);
if(c!='(')
return false;
break;
case '}':
stack_pop(stack);
if(c!='{')
return false;
break;
case ']':
stack_pop(stack);
if(c!='[')
return false;
break;
default:
break;
}
}
i++;
}
if(stack_empty(stack))
return true;
return false;
}
bool isValid1(char * s){
int i=0,top=-1;
char data[100],c;
if(s==NULL||s[i]=='\0')
return true;
while(s[i]!='\0'){
if(s[i]=='('||s[i]=='{'||s[i]=='['){
top++;
data[top]=s[i];
}else{
c=data[top];
//printf("%c ",c);
switch(s[i]){
case ')':
top--;
if(c!='(')
return false;
break;
case '}':
top--;
if(c!='{')
return false;
break;
case ']':
top--;
if(c!='[')
return false;
break;
default:
break;
}
}
i++;
}
if(top==-1)
return true;
return false;
}
int main()
{
char s[6]={'(',')','[',']','{','}'};
printf("%d\n",isValid(s));
return 0;
}