天天看點

用c語言編寫的atof函數,自己實作的atof()和atoi()代碼

# re: 自己實作的atof()和atoi()代碼  回複  更多評論

2014-09-05 22:27 by memristor

定義函數 double atof(const char *nptr);

函數說明 atof()會掃描參數nptr字元串,跳過前面的空格字元,直到遇上數

字或正負符号才開始做轉換,而再遇到非數字或字元串結束時

('\0')才結束轉換,并将結果傳回。參數nptr字元串可包含正負

号、小數點或E(e)來表示指數部分,如123.456或123e-2。

傳回值 傳回轉換後的浮點型數。

#include

#include

#include

#include

#include

double myatof(const char*s)

{

assert(s!=NULL);

double val,val2,power;

int sign,sign2,i;

//去掉字元串中的空格

for(i=0;isspace(s[i]);++i)

;

//判斷正負數 ,并将i指向下一個位置

sign = (s[i] == '-') ? -1:1;

if(s[i] == '+' || s[i] == '-')

i++;

//取浮點數的整數部分

for(val=0.0;isdigit(s[i]) && s[i] !=0;++i)

val = 10*val+s[i]-'0';

//取小數點

if(s[i] == '.')

i++; //後一個位置

//取小數點後面數

for(power=1.0;isdigit(s[i]) && s[i] !=0;++i)

{

val = 10*val+s[i]-'0';

power*=10; //float 放大的倍數

}

val=sign*val/power;

//如果有e的話處理e後面的數字

if(s[i]=='e' || s[i]== 'E'){

i++;

sign2 = (s[i] == '-')?-1:1;

if(s[i] == '+' || s[i] == '-')

i++;

for(val2=0.0;isdigit(s[i]) && s[i] !=0;++i){

val2 = 10*val2+s[i]-'0';

}

if(sign2 == -1)

return val/pow(10,val2);

else

return val*pow(10,val2);

}

return val;

}