三分钟就能学明白一个库函数?atoi的超详解和模拟实现

在模拟实现之前,我们必须知道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;
}

在这里插入图片描述
好了,今天的知识就分享到这里,如果对小伙伴有帮助的话,不妨点个赞,谢谢!!!

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值