今天我来介绍atoi函数和模拟实现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;
}
今天的讲解就到这里,关注点一点,下期更精彩。