# include <stdio.h>
# include <malloc.h>
# define Max 100
/***************************************
*文件名 : parentheses11.c *
*说明 :用来测试括号配对程序的 *
*版本 :v1.1 *
*作者 :flyli *
*日期 :2006.5.22 *
*修改 :flyli *
*修改日期:2006.5.22 *
*说明 :相对于前一版本增加了对括号中*
* 含有其它字符的兼容性 *
* 输入((a)(b))就会判断“正确”*
* 输入 ()(就会判断“错误” *
***************************************/
void Jadge(char* );
int main(void)
{
char String[Max] = {0};
scanf("%s",String); //输入
Jadge(String); //判断
system("pause");
return 0;
}
/*****************************************
* 函数说明: 用来判断括号是否配对的函数 *
* 括号间可以包括字符和数字等 *
* 函数输入: 要判断的字符串的首地址 *
*****************************************/
void Jadge(char* PIn )
{
char* PHead,* PPoint;
char i;
PHead = PPoint = (char*)malloc(Max*sizeof(char));
*PPoint = 'X';
PPoint ++;
PHead ++;
for(i = 1 ;i < Max+1 ;i++)
{
*PPoint = *PIn;
if(*PPoint == ')') //遇到')'开始回查
{
*PPoint = 0;
PPoint--;
while(*PPoint != '(') //将'('以外的符号全部忽略
{
PPoint--;
if(*PPoint == 'X' ) //当回到了头也没找到配对的(遇到)'X' 或又发现一个'('
{
puts("Error");
PHead--;
free(PHead); //把内存释放
return ;
}
}
if(*PPoint == '(')
{
PPoint--;
}
}
PPoint++;
PIn++;
}
if(* PHead == 0) //防止 '('多于')'的现象
puts("Right");
else
puts("Error");
PHead--; //把内存释放
free(PHead);
}