2. 實現 atof() 函式功能
c 庫函式 *double atof(const char str)
屬於庫函式stdlib.h,把引數 str 所指向的字串轉換為乙個浮點數。
具體操作為:
跳過字串開始的空白符,識別數字,點好,或正負符號,開始掃瞄合法浮點表達形式,直到遇到非合法字元結束掃瞄。如果空白符後是非合法字元,結束掃瞄,不會掃瞄後面的數字。
參見:c primer plus ---- chapter 3 ----data and c ---- 基本資料型別
-1.56e+122.87e-3
3.14159
.24e16
.8e-5
100.
#include#include#includechar *s_gets(char *s, int n)
else
while(getchar() != '\n')
continue;
} return ret;
}int main()
return 0;
}
結果:
3.2s
string: 3.2s, float: 3.200000
.4sstring: .4s, float: 0.400000
-e2string: -e2, float: 0.000000
.e3string: .e3, float: 0.000000
1.e3s
string: 1.e3s, float: 1000.000000
.3e+2s
string: .3e+2s, float: 30.000000
.0e3s
string: .0e3s, float: 0.000000
.2e-2s
string: .2e-2s, float: 0.002000
#include#include#include#include#define len 40
char *s_gets(char *s, int n);
double myatof(const char *s);
int main(void)
puts("bye!");
return 0;
}char *s_gets(char *s, int n)
return ret;
}double myatof(const char *s)
else if (s[i] == 'e' || s[i] == 'e') //科學計數符
else //非法字元
return sign * intpart;
} /*第一部分結束,有如下情況:
1. 掃瞄數字知道非法字元或字串結尾,2d 234
2. 數字加小數點 2.
3. 小數點 .
4. 數字加科學計數符 3e
5. 科學計數符 e 這種情況是非法表示,但最終計算的結果為0,
因此可當作正常計算,不單獨列出
6. 非法字元, 直接退出
*/ //第二部分,接著上述情況掃瞄
//能進入下面迴圈,排除遇到字串結尾,非法字元
//因此只能遇到點號或科學計數符
for (; s[i] != '\0'; i++)
//第三種:第一部分以e結束,3e e
else if (hase)
break;
//第四種:第一部分以點號結束,現在掃瞄非數字,非科學計數符的其他非法字元
else
return sign * (intpart + decpart);
} /*第三部分
從第二部分退出後繼續後面的程式,有如下情況:
以科學計算符 e 結束第二部分,前面有小數點或者沒有
小數部分計算完,下面討論指數部分
*/ //判斷指數部分符號
sign_e = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for(; s[i] != '\0'; i++)
ret = sign * ((intpart + decpart) * pow(10, sign_e * exp));
return ret;
}
C語言 atof 的實現
網上搜了幾個關於atof 實現的部落格,實現的都不是很全面,有的未考慮科學計數法,有的未考慮非法輸入,所以打算自己實現atof 將字串表示的浮點數轉化為double型別 可以採用科學計數法,如1.34e3 代表 1340.0 忽略前置空格 能夠考慮正負數值 能夠識別非法輸入 截斷至非法字元處,如at...
c語言 實現Strcat函式
實現char my strcat char dest,char src 函式.返回 dest字串的位址。功能 將src指向的字串追加到dest指向字串的後面。例如 char dest 10 andef char src ghi my strcat 之後,dest指向的字串為 andefghi inc...
C語言 實現stract函式
實現功能 實現char my strcat char dest,char src 函式,將src指向的字串追加到dest指向字串的後面 include include char my strcat char dst,char src while src 0 dst 0 return ret int ...