用到了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; }