atoi函数的模拟实现【C语言】

在这里插入图片描述

int my_atoi(char* str)
{
	assert(str);
	int flag = 1;
	if (*str == '\0')
		return 0;
	while (isspace(*str))
		str++;
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	long long ret = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))
		{
			ret = ret * 10 + flag * (*str - '0');
			if (ret<INT_MIN || ret>INT_MAX)
				return 0;
		}
		else
			return (int)ret;
		str++;
	}
	return (int)ret;

}

代码思路:首先使用断言判断传入地址是否为NULL,接着判断是否传入空字符串,如果是则直接返回0,否则继续执行。之后使用一个循环,这个循环是为了丢弃字符前的空字符。然后判断是否有正负号,如果是负号将flag值赋为-1,flag值计算最终值要使用到。后面遍历字符串直至末尾,如果是数字字符就减去字符0的ascii值将其转为数值并且将高位数字乘以相应的权值(权值纯属个人理解,表达可能不是那么准确,能体会到意思就行)算出最终值返回,如果最终值超出int类型的范围就返回0。在判断过正负号之后遇到数字以外的字符直接返回最终值,比如"aas"遇到第一个非空白字符不是数字字符就直接返回最终值0,如果遇到类似"12233a"就会返回12233的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值