今天我来介绍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)。溢出时返回值未定义。
应当应对的情况:
1.my_atoi(NULL) 传空指针
2.my_atoi(“”) 传空内容
3.my_atoi(" 123") 传空格+123
4.my_atoi(“-123”) 传正常整数
5.my_atoi(“123abc”) 传整数+字母
6my_atoi(“111111111111111111111”) 传较大的数字,超过了整形的取值范围
#include
#include
#include
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;
}
今天的讲解就到这里,关注点一点,下期更精彩。