模拟实现atoi

//注意到细节问题:
/*
一、函数参数
1、形参虚const修饰
2、注意对形参指针判空
二、需要考虑到的细节
1、负数和0(注意区别传入字符‘0’和异常时返回值)
2、空字符串
3、溢出问题
4、输入字符串非非数字字符
*/
int G_flag =0;//区别空串
long long strToDig(const char*digit, bool minus)
{
    long long num = 0;
    if (*digit == '\0')
    {
        G_flag = 1;//区别空串
        cout << "空字符串" << endl;
    }
    while (*digit != '\0')
    {
        if ('0'<=*digit&&*digit<'9')
        {
            int flag = minus ? -1 : 1;
            num = num * 10 + flag*(*digit - '0');
            if (!minus&&num>0x7FFFFFFF ||minus&&num<(signed)0x80000000)//若前面有没“-”号,则minus为false;!minus即可判断
            {
                cout << "转换整数溢出" << endl;
                num = 0;
                break;
            }
            digit++;
        }
        else
        {
            num = 0;
            break;
        }
    }
    return num;
}
int StrToInt(const char*string)
{
    long long num = 0;
    bool minus = false;
    if (string != NULL&&*string != '\0')
    {
        if (*string == '+')
            string++;
        else if (*string == '-')
        {
            minus = true;
            string++;
        }
    }
    //开始转换;
    if (string != '\0')
    {
        num = strToDig(string, minus);
    }
    return (int)num;
}

你可能感兴趣的:(面试题)