1️⃣函数介绍:
![](https://img-blog.csdnimg.cn/img_convert/add7d99162dd537c5c5a13f407694cda.png)
atoi的函数功能:将string所指向数字字符串转化为整数
🍖注意:
1、会跳过前面的空白字符(例如空格,tab缩进)等。
2、如果不能转换成 int 或者为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。
3、atoi输入的字符串对应数字存在大小限制(与int类型大小有关),若其过大可能报错-1
![](https://img-blog.csdnimg.cn/img_convert/1fe76d1f2969b96405a55990ac5c5507.png)
atoi对应头文件为<stdlib.h>
🍖实例应用:
(1)当字符串为空字符串
![](https://img-blog.csdnimg.cn/img_convert/2bf4109940759555315efc09e6144b5c.png)
(2)当字符串带有正负号
![](https://img-blog.csdnimg.cn/img_convert/7ca3a37b03aeb383b585bee8a1aad4f7.png)
(3)当字符串中含有空格
![](https://img-blog.csdnimg.cn/img_convert/281e0c8c1935622c275a2722a63be4b1.png)
(4)当参数含有非数字字符
![](https://img-blog.csdnimg.cn/img_convert/8233b573e2b30f4ed5237f4787e40da3.png)
(5)当参数过大时
![](https://img-blog.csdnimg.cn/img_convert/d91250ae1b8e0bee3e7fa3c1114c6664.png)
![](https://img-blog.csdnimg.cn/img_convert/31e1da15c837a5a0faa57bd7c51e3e56.png)
2️⃣函数实现思路:
针对上述实例应用输出结果,可以总结出以下几种情形:
1、参数为空指针
2、为空字符串
3、含有正负号
4、含有空格
5、含有非数字字符
6、溢出问题
基本思路:
![](https://img-blog.csdnimg.cn/img_convert/a42c7721581bf11d6282d69db75268ce.png)
3️⃣代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
enum Status
{
inlegal,
legal
}status;
//定义一个枚举类型来判断是合法还是非法,区分空字符串返回0,还是合法返回0
int my_atoi(char* str)
{
status = inlegal;
long long ret = 0;
int sign = 1;
assert(str);///断言处理,判断是否为空指针
if (*str == '\0')//判断是否是空字符串
{
return 0;//返回非法 0
}
while (*str == ' ')//当遇到空格时
{
str++;//跳至下一位
}
if (*str == '+')
{
sign = 1;
str++;//跳至下一位
}
else if (*str == '-')
{
sign = -1;
str++;//跳至下一位
}
while (*str)//'\0’之前
{
if ((isdigit(*str)))//disigit-->判断是否为数字字符函数
{
ret = ret * 10 + sign * (*str-'0');
//数字字符转化为数字
}
if (ret > INT_MAX)//如果ret为int型,则一定小于INT_MAX
{
return INT_MAX;
}
else if (ret < INT_MIN)
{
return INT_MIN;
}
if (!(isdigit(*str)))
{
return ret;
}
str++;
}
//跳出while循环,遇到'\0'
status = legal;
return ret;
}
int main()
{
char arr[] = "-12839#9210";
int ret = my_atoi(arr);
if (status == inlegal)
{
printf("是非法数字字符串,%d\n", ret);
}
else if (status == legal)
{
printf("是合法数字字符串,%d\n", ret);
}
return 0;
}