括号配对测试程序1.1版

 

# 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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值