您的位置:首页 > 编程语言 > C语言/C++

C语言50题之模拟实现atof、atoi

2016-12-19 20:54 423 查看
atof,就是 把字符串转换成浮点数,这个函数就可以完成,他们的家族有很多:atoi,itoa,其中的意思,就不详细说了,这里举出一个即可,都是一个家族的嘛,都与规律的。

首先说一下关于字符串转换成数字的问题,例如:“12345”要转换就是12345,那么,要是字符串中出现其他的字符,例如:“123ah”,这种情况呢?

显然这就是异常了,我们要写好这个函数,首先就得分析一下这个异常处理的情况:

首先应处理的就是空;如果是空,那就算了;然后就是正负号;然后是小数点;最后就是正常的情况处理了。话不多说,来看看吧!

模拟实现atof

//模拟实现atof
double my_atof(char const *p)
{
double ret = 0;
int flag = 1;
int count = 0;
assert(p != NULL);
while (isspace(*p))
{
p++;
}
while (*p)
{
if (count)
{
count = count * 10;
}
if (*p == '+')
p++;
else if (*p == '-')
{
p++;
flag = -1;
}
else if (*p == '.')
{
count++;
p++;
}
else if (*p >= '0'&& *p <= '9')
{
ret = ret * 10 + (*p - '0');
p++;
}
else
return 0;
}
return ret*flag / count;
}

int main()
{
printf("%f\n", my_atof(" +23.45"));
printf("%f\n", my_atof(" -2.345"));
printf("%f\n", my_atof("+234.5"));
printf("%f\n", my_atof("-23.45"));
printf("%f\n", my_atof("2.345"));
printf("%f\n", my_atof("234.5"));
printf("%f\n", my_atof(" ."));
printf("%f\n", my_atof("12.3ab"));
system("pause");
return 0;
}


这里总共列举了几个情况,根据它们的输出结果,或许会得出一些结论:



atoi的实现和atof的是一样的,毕竟是一个家族的:

atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息