C++ NC100 将字符串转化为整数

    //要求:
    //①求正负
    //②上界溢出则返回上界,下界溢出则返回下界
    //③遇到非数字(不包含+,-),则返回在该字符出现之前计算出的整数
    //④能够跳过前面的空白字符
    int atoi(const char *str)
    {
        long long num = 0;//绝对值,为了发现溢出,使用比返回类型int(4字节)更长的类型long long(8字节)
        int sign = 1;//符号
        int result = 0;//结果
        long long temp; //暂存结果
        const int min = (int)0x80000000;//下界
        const int max = 2147483647;//上界

        while (*str == '\t' || *str == ' ')//跳过前面的空白字符
        {
            ++str;
        }
        if (*str == 0)  //str为空字符串,那么将返回 0
        {
            goto Over;
        }
        if (*str == '-' || *str == '+')//判断正负
        {
            if (*str == '-')
                sign = -1;
            ++str;
        }

        for (; *str != 0; ++str)//计算获数值
        {
            if (*str >= '0'&&*str <= '9')
            {
                num = num * 10 + (*str - '0');
            }
            else
            {
                break;//非数字则截断
            }
        }
        temp = num * sign;
        result = temp;
        if (temp > max)//判断是否上界溢出
        {
            result = max;
            goto Over;
        }
        if (temp < min)//判断是否下界溢出
        {
            result = min;
            goto Over;
        }
    Over:
        return result;
    }

 

posted @ 2021-09-24 18:31  mshentai  阅读(90)  评论(0编辑  收藏  举报