使用atof函数,将字符串数组转化为浮点型数字(指针版本)
atof1和atof2并无较大区别,只不过第二种如果将for循环语句放入if循环语句中,就会导致pow未被初始化,使得最终结果无法得出。而第一种则在一开始就对pow变量进行了初始化,就不会出现这样的问题。
#include<ctype.h>
//convert string array to float
double atof1(char *s)
{
double f,sign,pow=1.0;
for (; isspace(*s); s++)//跳过空白符
;
sign = (*s == '-') ? -1 : 1;//负数怎么处理
//浮点数有整数部分和小数部分
for (f = 0.0; isdigit(*s); s++)//整数部分
f = 10.0 * f + (*s - '0');
if (*s == '.')
{
s++;
for (; isdigit(*s); s++)
{
f = 10.0 * f + (*s - '0');
pow *= 10.0;
}
}
return sign * (f / pow);
}
double atof2(char *s)
{
double f, sign, pow;
for (; isspace(*s); s++)//跳过空白符
;
sign = (*s == '-') ? -1 : 1;//负数怎么处理
//浮点数有整数部分和小数部分
for (f = 0.0; isdigit(*s); s++)//整数部分
f = 10.0 * f + (*s - '0');
if (*s == '.')
{
s++;
}
for (pow = 1.0; isdigit(*s); s++)
{
f = 10.0 * f + (*s - '0');
pow *= 10.0;
}
return sign * (f / pow);
}
int main()
{
char *s = "12.34";
printf("%f", atof1(s));
printf("%f", atof2(s));
return 0;
}