69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
gets(str);
int n=(int)strlen(str);
int i,k=0,flag=0;
char a[100];
for(i=0;i<n&&(flag==0);i++)
{
switch(str[i])
{
case '(':
case '[':a[k++]=str[i];break;
case ')':
if(a[k-1]=='('){a[k-1]='\0';k--;}
else flag=1;
break;
case ']':
if(a[k-1]=='['){a[k-1]='\0';k--;}
else flag=1;
break;
}
}
printf("%d\n",flag);
return 0;
}
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define STACK_INIT_SIZE 10
#define STACK_GROW_SIZE 5
#define ELEMTYPE char
#define OK 1
#define ERROR 0
typedef struct { /*建立一个栈的首结点*/
ELEMTYPE * base;
ELEMTYPE * top;
int stacksize;
} SpStack;
int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/
s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
int StackEmpty(SpStack *s) { /*判断栈是否为空*/
if (s->top==s->base) return OK;
else return ERROR;
}
int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/
if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/
s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->stacksize+=STACK_GROW_SIZE;
s->top=s->base+s->stacksize;
}
*s->top++=e;
return OK;
}
int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/
if (StackEmpty(s)) return ERROR;
*e=*(--s->top);
return OK;
}
int Comp(ELEMTYPE a,ELEMTYPE b) {
if ((a=='('&&b!=')')
||(a=='['&&b!=']')
||(a=='{'&&b!='}')) {
return ERROR;
} else return OK;
}
int Count(SpStack *s) {
ELEMTYPE e[STACK_INIT_SIZE*2];
ELEMTYPE e1;
int i;
InitStack(s);
fgets(e,STACK_INIT_SIZE*2,stdin);
if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;
printf("%s\n",e);
for (i=0;e[i]!='\0';i++) {
switch (e[i]) {
case '(':
case '[':
case '{':
Push(s,e[i]);
break;
case ')':
case ']':
case '}':
if (StackEmpty(s)) {
printf("%*s↖右括号多余\n",i+1,"");
return(ERROR);
} else Pop(s,&e1);
if (!Comp(e1,e[i])) {
printf("%*s↖左右匹配出错\n",i+1,"");
return(ERROR);
}
}
}
if (!StackEmpty(s)) {
printf("%*s↖左括号多余\n",i,"");
return(ERROR);
} else {
printf("匹配正确\n");
return(OK);
}
}
void main() {
SpStack s;
Count(&s);
free(s.base);
}
int isLegalStr(char* str)
{
char stack[100];
int top;
for(top=0; *str; ++str)
switch(*str)
{
case '(':
stack[top++] = ')'; //入栈
break;
case '[':
stack[top++] = ']'; //入栈
break;
case ']':
case ')':
top -= stack[top-1]==*str; //匹配出栈 不匹配不出栈
}
return !!top;
}
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 256
int main(void)
{
char* str = (char*)malloc(MAX_LEN);
char* brackets = (char*)malloc(MAX_LEN);
printf("input a string: ");
fgets(str, MAX_LEN, stdin);
str[strlen(str) - 1] = '\0';
int i;
int numbers = 0;
char now;
for (i = 0; i < MAX_LEN; ++i)
{
if (str[i] == '(')
{
brackets[numbers++] = '(';
}
else if (str[i] == '[')
{
brackets[numbers++] = '[';
}
else if (str[i] == ')')
{
if (numbers >= 1 && brackets[numbers - 1] == '(') /*之所以测试numbers>=1 是防止因为右括号多余左括号而引起越界*/
{
--numbers;
}
else
{
break;
}
}
else if (str[i] == ']')
{
if (numbers >= 1 && brackets[numbers - 1] == '[')
{
--numbers;
}
else
{
break;
}
}
}
brackets[numbers] = '\0';
if (i < strlen(str) || strlen(brackets) > 0)
{
printf("false\n");
}
else
{
printf("true\n");
}
system("pause");
return 0;
}
我写的一个简单的程序
int CheakMatch(char *str)
{
stack<char> staCheak;
while(*str != '\0')
{
switch(*str)
{
case '(':
case '[':
{
staCheak.push(*str++);
break;
}
case ')':
case ']':
{
if(!staCheak.empty())
{
char top;
top = staCheak.top();
staCheak.pop();
if((*str == ')' && top != '(') || (*str == ']' && top != '['))
return 1;//不匹配,返回1
else
{
str++;
break;
}
}
else//没有左括号,不匹配
return 1;
}
default:
{
str++;
break;
}
}
}
if(staCheak.empty())//栈空,匹配
return 0;
else
return 1;
}