atoi函数的介绍和模拟实现

今天我来介绍atoi函数和模拟实现atoi函数。





atoi和与其功能相似的函数的介绍

atoi函数是一个将字符串转换为整数值的函数。
请添加图片描述
由msdn查询可以得知,atoi函数的返回类型是int类型,参数类型是const char *,传参要转换的字符串。

在msdn中,我们还可以发现与atoi函数作用相同的函数,如下:
请添加图片描述

这三个函数分别是atof函数、_atoi64函数、atol函数

那么这四个函数有什么区别呢?我们继续在msdn往下查询。

atof函数将字符串转换为双精度浮点值
atoi函数将字符串转为整形值
_atoi64函数将字符串转为long long类型的值
atol将字符串转为long类型的值

返回值介绍

atof函数返回double类型的值,atoi函数返回int类型的值,_atoi64返回long long类型的值,atol函数返回long类型的值,如果输入无法转换为该类型的值,则返回值为0(对于atoi和_atoi64)、0(对于atol)或0.0(对于atof)。溢出时返回值未定义。



atoi函数的模拟实现

应当应对的情况:
1.my_atoi(NULL) 传空指针
2.my_atoi(“”) 传空内容
3.my_atoi(" 123") 传空格+123
4.my_atoi(“-123”) 传正常整数
5.my_atoi(“123abc”) 传整数+字母
6my_atoi(“111111111111111111111”) 传较大的数字,超过了整形的取值范围

#include<stdio.h>
#include<limits.h>
#include<ctype.h>
enum status
{
	VALID,
	INVALID
};
enum status Status = INVALID; 
int my_atoi(const char* ps)
{
	long long ret = 0;
	int flag = 1;
	if(ps == NULL)  //应对空指针
	{
		return 0;
	}
	if(*ps == '\0')  //应对空内容
	{
		return 0;
	}
	while(isspace(*ps))   //应对空格
	{
		ps++;
	}
	if(*ps == '-')     //负数
	{
		flag = -1;
		ps++;
	}
	else if(*ps == '+')    //正数
	{
		flag = 1;
		ps++;
	}
	while(isdigit(*ps))
	{
		ret = ret * 10 + flag * (*ps - '0');
		if(ret < INT_MIN || ret > INT_MAX)   //应对数字过大,超过整形的取值范围
		{
			return 0;
		}
		ps++;
	}
	if(*ps == '\0') 
	{
		Status = VALID;
		return (int)ret;
	}
	else
	{
		return (int)ret;
	}
}	
int main()
{
	int ret = my_atoi("-123");
	if(Status == VALID)
		printf("合法的转换:%d\n",ret);
	else if(Status == INVALID)
		printf("非法的转换:%d\n",ret);
	return 0;
}

今天的讲解就到这里,关注点一点,下期更精彩。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值