/*
实现atof函数
*/
#include <stdio.h>
#include <string.h>
#include <assert.h>
double atof( char* p)
{
double value = 0.0;
double i = 1;
int sign = 1;
char *str = p;
assert( str != NULL);
while (*str == ' '|| *str == '\t')//判断是否有空格和tab ;
{
str++;
}
if( *str++ == '-') //判断是否有‘-’号 ;
{
sign = -1 * sign;
;
}
if(*str == '+')
{
str++;
}
while(*str>='0' && *str<='9' && *str!='\0')
{
value = value*10+(*str-'0'); //十位加各位 百位加前面的value 千位加... ;
str++;
}
while(*str == '.' || *str>='0' && *str<='9')
{
str++; //进入循环后先给 str++ 使其指向小数点后的第一位 ;
i = i/10; //给 int i 除10 为0.1 0.01 ..... ;
value = value + (*(str++)-'0')*i;//同上面的value ;
}
return value*sign;
}
int main()
{
char *p=" -11.0";
double atof( char* p);
printf("%f\n",atof(p));
return 0;
}
/*
实现atoi函数 和上面的atoi异曲同工 。。。
*/
int my_atoi(char *str)
{
int value = 0;
int sign = 1;
assert( str != NULL);
while (*str == ' '|| *str == '\t')
{
str++;
}
if( *str == '-')
{
sign = -1 * sign;
str++;
}
if(*str == '+')
{
str++;
}
if(*str>='0' && *str<='9' && *str!='\0')
{
value = value*10+(*str-'0');
str++;
}
value = value * sign;
return value;
}