下面的stof()函数模拟标准库函数atof()的功能
/**//*处理方法:化小数为整数,化指数为小数处理*/
#include<stdio.h>
#include<ctype.h>
int main()
...{ double stof(char []);/**//*被调用函数的声明*/
char test[]=" -123.456e-2";
printf("%e",stof(test));
getch();
return 0;
}
double stof(char s[])
...{ int i,sign,exp;
double power,value;
for(i=0;isspace(s);++i)/**//*跳过空白符号*/
;
sign=(s=='-')?-1:1;/**//*化符号为数值*/
if(s=='+'||s=='-')
++i;
for(value=0.0;isdigit(s);++i)
value=value*10.0+(s-'0');
if(s=='.')
++i;
for(power=1.0;isdigit(s);++i)
...{ value=value*10.0+(s-'0');
power*=10.0;
}
value=sign*value/power;
/**//*以下部分针对含指数部分的浮点数*/
if(s=='e'||s=='E')
...{ ++i;
sign=(s=='-')?-1:1;
if(s=='+'||s=='-')/**//*针对‘+’可输入可不输入的字符串*/
++i;
for(exp=0;isdigit(s);++i)
exp=exp*10.0+(s-'0');
if(sign==-1)
while(exp-->0)
value/=10;/**//*不用value*=0.1原因是0.1在计算机中的二进制表示比实际值要稍小*/
else
while(exp-->0)
value*=10;
}
return value;
}
表头文件
#include <stdlib.h>
定义函数
double atof(const char *nptr);
函数说明
atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到*非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值
返回转换后的浮点型数。
附加说明
atof()与使用strtod(nptr,(char**)NULL)结果相同。
范例
/* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
main()
{
char *a=”-100.23”;
char *b=”200e-2”;
float c;
c=atof(a)+atof(b);
printf(“c=%.2f\n”,c);
}
执行
c=-98.23