用c語言實現一個自己的atof()函式
用c語言實現atof()函式,將字元分解用乘法和除法實現轉換,程式碼如下
*************************************************************************************************************************************************************************************************
#include<stdio.h>
#include<math.h>double my_atof(char const *str);
{
char src[] = " -456.78999";
printf("%lf",my_atof(src));
return 0;
}
double my_atof(char const *str)
{
char const *p = NULL ;
int num;
double ret = 0;
int sign = 0 ;
while(isspace(*str))
str++;
if(*str == '-')
{
sign = -1;
str++;
}
else
{
sign = 1;
}
while(isdigit(*str))
{
ret = ret * 10 +(*str-'0');
str++;
}
if(*str == '.')
{
//p = str;
p = str + 1;
//str ++;
}
str ++;
while(isdigit(*str))
{
ret = ret * 10 + (*str - '0');
str ++;
}
num = pow(10,(str - p));
return (ret * sign) / num;
}
這裡用到了指標減指標以獲得小數點之後的數字字元個數,指標減指標得到的是兩個指標之間的陣列元素個數,這種方法只能用於陣列,也就是連續開闢的儲存空間才能使用指標減指標。
pow()函式是包含在 math.h 檔案中的函式,用法為pow(10,N) 表示10的N次方,以此類推pow(M, N)就表示M的N次方。
此處還有個需要注意的地方,const 修飾的指標只能賦給同樣被const 修飾的指標!
*************************************************************************************************************************************************************************************************
#include<stdio.h>
#include<string.h>
#include<assert.h>
double my_atof(char const *src);
int main()
{
double S_num;
char str[] = " -123.456";
printf("%lf",my_atof(str));
return 0;
}
double my_atof(char const *src)
{
double Front_num = 0.0, After_num = 1.0;
int flag;
assert(src != NULL); //判斷字串是否為空
while(isspace(*src))
{
src++;
}
/*
flag = (*src == '-')?-1:1; //此處可以用三目運算子,也可以直接用if 語句判斷,沒有本質區別
if(*src == '-' || *src == '+')
{
src ++;
}
*/
if(*src == '-')
{
flag = -1;
src++;
}
else flag = 1;
while(isdigit(*src))
{
Front_num = Front_num * 10.0 + (*src - '0'); //Front_num是儲存浮點數的,從第一個數字開始
src ++;
if(*src == '.')
{
src++;
break;
}
}
while(isdigit(*src))
{
Front_num = Front_num * 10.0 + (*src - '0');
After_num = After_num * 10.0;//After_num是用來計小數點之後的數字字元位數
src ++;
}
return flag*(Front_num / After_num);
}
這兩個程式實現的功能是一樣,基本思想也都一樣,思路也很簡單。
我正走在成為程式設計師的路上,寫這篇文章貽笑方家了