70,037
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <cstring>
#include <ctype.h>
double atof ( char s[] )
{
double val, power;
int i,sign;
for ( i=0; isspace ( s[i] ); i++ )
;
sign = ( s[i] == '-' ) ? -1 : 1;
if ( s[i] == '+' || s[i] == '-' )
i++;
for( val = 0.0; isdigit ( s[i] ); i++ )
val = 10.0 * val + ( s[i] - '0' );
if ( s[i] == '.' )
i++;
for ( power = 1.0; isdigit ( s[i] ); i++ ) {
val = 10.0 * val + ( s[i] - '0' );
power *= 10.0;
}
return sign * val / power;
}
const int maxn=308;
char szInput[maxn];
int main()
{
double res=0.0;
memset(szInput,0,sizeof(szInput));// clear buffer
printf("Enter a string:");
fgets(szInput,sizeof(szInput),stdin);
res=atof(szInput);
printf("%lf\n",res);
return 0;
}
doule atof ( char s[] )
{
doule val, power;
int i,sign;
for ( i=0; isspace ( s[i] ); i++ ); //跳过数字开头空格,“但是感觉只能跳过字符串头上的空白,中间的怎么跳?”数值内部不能有空格的
sign = ( s[i] == '-' ) ? -1 : 1; //判断正负
if ( s[i] == '+' || s[i] == '-' ) i++; //如果带正负号,则i++
//计算整数部分的值
for( val = 0.0; isdigit ( s[i] ); i++ )
val = 10.0 * val + ( s[i] - '0' );
if ( s[i] == '.' )
i++;
//小数点后面部分,逐步乘以10 ,并用power表示整个double数值扩大的倍数
for ( power = 1.0; isdigit ( s[i] ); i++ ) {
val = 10.0 * val + ( s[i] - '0' );
power * = 10.0;
}
// 正负号 * 扩大power倍数后的值 / 扩大的倍数
return sign * val / power;
}