在模拟实现之前,我们必须知道atoi函数是干嘛的。为了节省时间,直接上结论:
—————————————————————————————————
atoi–#include <stdlib.h>
int atoi (const char * str);
将字符串转换为整数
解析C字符串str,将其内容解释为整数,该整数作为int类型的值返回。
函数首先根据需要丢弃一开始的空白字符(isspace中都属于空白字符,如图),直到找到第一个非空白字符。然后,从这个字符开始有两种情况:
1.是第一个非空字符是“+”或者“-”,判断其后是否紧跟有数字字符,将后面紧跟的连续的(不间断数字字符的才会纳入解析)数字字符解析成整数。
2.第一个非空字符就是数字字符,从该数字字符开始,将后面紧跟的连续的数字字符解析成整数。
3.第一个非空字符非以上两种情况,直接返回0.
—————————————————————————————————
了解完atoi函数的基本使用之后,如何模拟实现它呢?
很显然,针对它的三种情况制定不同的解决办法即可
int my_atoi(const char*str)
{
assert(str != NULL);//检测不为空指针
int lenth = strlen(str);
int ret = 0;
int i = 0;
while (i < lenth)
{
if (isspace(str[i]))//未遇到非空格字符均跳过
{
i++;
}
else if ((str[i] >= '0' && str[i] <= '9')||str[i]=='-'||str[i]=='+')//一二两种情况混合
{
int j = i;
if (str[i] == '-'||str[i]=='+')//第一种情况
{
j++;//跨过“+”或“-”的那一位
}
while (j < lenth)//计算连续的数字字符
{
if (str[j] >= '0' && str[j] <= '9')
{
ret = (ret * 10) + (str[j] - '0');
j++;
}
else
break;
}
if (str[i] == '-')//第一种,输出负数
return -ret;
else//第二种
return ret;
}
else//第三种情况,直接退出循环
break;
}
return 0;
}
好了,今天的知识就分享到这里,如果对小伙伴有帮助的话,不妨点个赞,谢谢!!!