my_atoi
my_atoi
小龙Jason 发表于4年前
my_atoi
  • 发表于 4年前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

听了atoi哥的故事,顺手写个

#define INT_MAX  (2147483647)
#define INT_MIN  (-2147483648)

int my_atoi(const char * str)
{
	if (!str)
		return 0;

	unsigned int result = 0;
	int sign = 1;

	if (*str == '-' || *str == '+')
	{
		if (*str == '-')
		{
			sign = -1;
		}
		++str;
	}

	while(*str >= '0' && *str <= '9')
	{
		unsigned int digital = *str-'0';
		if (result > INT_MAX /10
			|| (sign > 0)? (result == INT_MAX/10 && digital > INT_MAX%10) 
			:  (result == (INT_MAX +1)/10 && digital > (INT_MAX+1)%10) 
			)
		{
			return sign > 0 ? INT_MAX : INT_MIN;
		}
		result = result*10 + digital
		++str;
	}

	return ((int)result) * sign;
}
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 8
码字总数 2794
×
小龙Jason
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: