符号数的识别

 

用到了GOTO 

状态图

 

 

////
// fileName :fuhaoshu.cpp
// summary  :无符号数的识别
//
// modified by vencient Yu 
// on 2008 - 3 -30




#include
< stdio.h >
#include
< ctype.h >     // for isdigit(int c)
#include < math.h >


int  shibie( char   * num, int  n);
bool  IdentificationNumber( char * p,  int  lenth);

void  main()
{
    
char num[]= "13.43e-5h" ;
    
//cout<<"请输入您要查询的数: "<<endl;
    
//cin>>num;
    

    
int lenth = sizeof(num);

//    printf(" %d ", isdigit(num[2]));
//    printf(" %d ", isdigit(''));

    
if(IdentificationNumber(num, lenth))
    
{
        printf(
"符号数");
    }

    
else
    
{
        printf(
"不是");
    }



}



bool  IdentificationNumber( char   * p,  int  lenth)
{
    
char *pCurrent ;
    
double value;
    
double power;    //小数部分的控制
    bool flag;
    
int exponent;
    
bool sign;
    
    pCurrent 
= p;
    value 
= 0.0;
    flag 
= false;
    exponent 
= 0;
    sign 
= false;
    power 
= 1.0;
    
    
while(isdigit(*pCurrent))      //整数部分
    {    
        value 
= value * 10;
        
        value 
+= ((*pCurrent) - '0');   //把字符转化为数字
        
        pCurrent
++;
        
    }

    
if'E' == *pCurrent || 'e' == *pCurrent) //开始指数部分
    {
        pCurrent
++;  // pass  current position
        
        
if(isdigit(*pCurrent)) //指数部分
        {
            
while(isdigit(*pCurrent))
            
{    
                exponent 
= exponent * 10;
                
                exponent 
+=  ((*pCurrent) - '0') ;
                pCurrent
++;
            }

            
            sign 
= true;
            flag 
= true;
            
goto END ;
        }

        
else
        
{
            sign 
= ('+' == *pCurrent) ? true : false ;
            
            pCurrent
++;
            
while(isdigit(*pCurrent)) //指数部分
            {
                exponent 
= exponent * 10;
                exponent 
+=  ((*pCurrent) - '0') ;
                
                pCurrent
++;
            }

            
            flag 
= true;
            
            
goto END;
        }

        
    }

    
else if('.' == *pCurrent)  //开始小数部分
    {
        pCurrent
++ ; //get to next position
        
        
        
while(isdigit(*pCurrent))
        
{
            value 
= value * 10 + (*pCurrent - '0');
             
            power 
*= 10.0 ;    //最后要变成小数时除的数            

            pCurrent
++;
        }


        value 
/= power;      //重新归为小数

        
if('E' == *pCurrent || 'e' == *pCurrent)
        
{
            pCurrent
++;  //get to the next position
            
            
if(isdigit(*pCurrent)) //指数部分
            {
                
while(isdigit(*pCurrent))
                
{
                    exponent 
= exponent * 10 + ((*pCurrent) - '0');
                    
                    pCurrent
++;
                }


                sign 
= true;
                flag 
= true;
                
goto END ;
            }

            
else 
            
{
                sign 
= ('+' == *pCurrent) ? true : false;
                
                pCurrent
++;

                
while(isdigit(*pCurrent)) //指数部分
                {
                    exponent 
= exponent * 10;
                    exponent 
+=  ((*pCurrent) - '0') ;

                    pCurrent
++;
                }

                
                flag 
= true;
                
                
goto END;
            }

            
        }

        
else                     //非法输入
        {      
            flag 
= false;
            
            
goto END;
        }

    }

    
else
    
{
        flag 
= false;
    }

    
    
    
END:  
    
if(sign)
    
{
        value 
= value * pow(10, exponent); 
    }

    
else
    
{
        value 
= value / pow(10, exponent);    
    }


    printf(
" the value is %e  ", value);
    
    
return flag;
    
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值