#include<stdio.h>
#include<stdlib.h>
#define stack_init_size 100
#define stack_increment 10
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
void init(SqStack &S)
{
S.base=(ElemType*)malloc(stack_init_size*sizeof(ElemType));
if(S.base)
{
exit(-1);
}
S.top=S.base;
S.stacksize=stack_init_size;
}
void getTop(SqStack S,ElemType &e)
{
if(S.top==S.base)
{
return;
}
e=*(S.top-1);
}
void pop(SqStack &S,ElemType &e)
{
if(S.top=S.base)
{
return;
}
e=*--S.top;
}
void push(SqStack &S,ElemType c)
{
if(S.top-S.base==S.stacksize)
{
S.base=(ElemType*)realloc(S.base,(S.stacksize+stack_increment)*sizeof(ElemType));
if(!S.base){
exit(-1);
}
S.top=S.base+S.stacksize;
S.stacksize+=stack_increment;
}
*(S.top++)=c;
}
int isEmpty(SqStack S)
{
if(S.top==S.base)
{
return TRUE;
}
else
{
return FALSE;
}
}
int isLeft(char &c)
{
if(c=='('||c=='['||c=='{')
{
return TRUE;
}
else
{
return FALSE;
}
}
int isMatch(char &c,char &e)
{
if((c==')'&&e=='(')||(c==']'&&e=='[')||(c=='}'&&e=='{'))
{
return TRUE;
}
else
{
return FALSE;
}
}
int checkBrackets(char s[])
{
int i=0;
SqStack S;
init(S);
ElemType c,e;
while((c=s[i++])!='\0')
{
if(isLeft(c))
{
push(S,c);
}
else
{
if(isEmpty(S))
{
return 0;
}
else
{
getTop(S,e);
if(isMatch(c,e))
{
pop(S,e);
}
else
{
return 0;
}
}
}
}
if(isEmpty(S))
{
return 1;
}
return 0;
}
int main(void)
{
char s[]={'[','(',')',']','{','}'};
int m=checkBrackets(s);
if(m==1)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
題目:1、從鍵盤輸入一個僅包括(、) 、[、]、{、}共6 種字符的括號串,使用堆疊檢查其合法性。如:[ ] { }、[ { ( ) } ] 合法;[ ] ( { }、 { [ } ] 非法。為了方便我就直接用陣列代替輸入了,問一下怎么改可以當字符合法時輸入yes,不合法輸入no
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
代碼錯的對于這樣的資料 無能為力
{[}]
只計算個數是不行的
uj5u.com熱心網友回復:
統計各個符號的個數的回圈也寫得非常糟糕uj5u.com熱心網友回復:
發帖的時候 把代碼放在[ code ]標簽里面能保留格式和高亮
你現在這樣的代碼沒人想看
uj5u.com熱心網友回復:
ok,下次注意
uj5u.com熱心網友回復:
ok,下次注意
uj5u.com熱心網友回復:
while((c=s[i++])!='\0')
你的s根本沒存 0
你這個回圈無法在合理的結束
uj5u.com熱心網友回復:
[ { ( ) } ] 合法,[ ] { }非法,說得挺熱鬧的,解決了?
uj5u.com熱心網友回復:
解決起來很簡單倒不如說 需要解決這個問題才是例外的
括號匹配是堆疊基本應用 很入門的練習題
uj5u.com熱心網友回復:
使用陣列設計了2種邏輯,小學算術先小括號始中括號打括號,未使用小括號就適應中大括號為非法,大學邏輯或編程邏輯只檢查順序對稱不分括號型別,之上寫的代碼留著到適合應用場景時用,免日后再寫.
看看熱鬧.
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
不知道用蝦米測驗了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100322.html
標籤:C++ 語言
下一篇:keil5 編譯問題
