【C语言进阶】实现atoi函数

1️⃣函数介绍:

【C语言进阶】实现atoi函数_第1张图片

atoi的函数功能:将string所指向数字字符串转化为整数

注意:

1、会跳过前面的空白字符(例如空格,tab缩进)等。

2、如果不能转换成 int 或者为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。

3、atoi输入的字符串对应数字存在大小限制(与int类型大小有关),若其过大可能报错-1

【C语言进阶】实现atoi函数_第2张图片

atoi对应头文件为

实例应用:

(1)当字符串为空字符串

【C语言进阶】实现atoi函数_第3张图片

(2)当字符串带有正负号

【C语言进阶】实现atoi函数_第4张图片

(3)当字符串中含有空格

【C语言进阶】实现atoi函数_第5张图片

(4)当参数含有非数字字符

【C语言进阶】实现atoi函数_第6张图片

(5)当参数过大时

【C语言进阶】实现atoi函数_第7张图片

2️⃣函数实现思路:

针对上述实例应用输出结果,可以总结出以下几种情形:
1、参数为空指针
2、为空字符串
3、含有正负号
4、含有空格
5、含有非数字字符
6、溢出问题

基本思路:

【C语言进阶】实现atoi函数_第8张图片

3️⃣代码实现:

#include
#include
#include
#include
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;
}

你可能感兴趣的:(c语言,开发语言)