c语言程序修改? 20
在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否相匹配?需要匹配括号包括大括号:[],和小括号:()。匹配思想:从左至右扫描一个字符串(或表...
在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否相匹配?需要匹配括号包括大括号:[ ],和小括号:( ) 。
匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。
算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回FLASE。
以下是算法的c语言实现,请改造该算法,支持花括号 { }
#define TRUE 0
#define FLASE -1
SqStack S ;
S=Init_Stack() ; /*堆栈初始化*/
int Match_Brackets( )
{ char ch , x ;
scanf(“%c” , &ch) ;
while (asc(ch)!=13)
{
if ((ch==‘(’)||(ch==‘[’)) push(S , ch) ;
else if (ch==‘]’)
{
x=pop(S) ;
if (x!=‘[’)
{
printf(“’[’括号不匹配”) ;
return FLASE ;
}
}
else if (ch==‘)’)
{
x=pop(S) ;
if (x!=‘(’)
{
printf(“’(’括号不匹配”) ;
return FLASE ;
}
}
}
if (S.top!=0)
{
printf(“括号数量不匹配!”) ;
return FLASE ;
}
else return TRUE ;
} 展开
匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。
算法思想:设置一个栈,当读到左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,返回FLASE。
以下是算法的c语言实现,请改造该算法,支持花括号 { }
#define TRUE 0
#define FLASE -1
SqStack S ;
S=Init_Stack() ; /*堆栈初始化*/
int Match_Brackets( )
{ char ch , x ;
scanf(“%c” , &ch) ;
while (asc(ch)!=13)
{
if ((ch==‘(’)||(ch==‘[’)) push(S , ch) ;
else if (ch==‘]’)
{
x=pop(S) ;
if (x!=‘[’)
{
printf(“’[’括号不匹配”) ;
return FLASE ;
}
}
else if (ch==‘)’)
{
x=pop(S) ;
if (x!=‘(’)
{
printf(“’(’括号不匹配”) ;
return FLASE ;
}
}
}
if (S.top!=0)
{
printf(“括号数量不匹配!”) ;
return FLASE ;
}
else return TRUE ;
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询