C++实现atoi

需要考虑的情况

1 字符串本身是否为空或者长度为0 直接返回0

2 字符串前面和后面是否有空格

3 字符串数字开始之前是否有正负号

4 判断每个字符是否是有效字符

5 判断中间或者是最后的结果是否越界

大概也就这些需要注意的,其他的也没有什么了。

(PS.没有考虑到是否有小数点,以及是否用科学计数法来进行表示)

int myatoi(string str)
{
    //为空判断
    if(str.size()==0)
        return 0;

    //起始位置
    int start_string = 0;
    while(str[start_string] == ' ')
    {
        start_string++;
    }

    //结束位置
    int end_string = str.size()-1;
    while(str[end_string] == ' ')
    {
        end_string--;
    }

    cout << start_string << "  " << end_string << endl;

    //正负判断
    bool positive = true;
    if(str[start_string] == '-')
    {
        positive = false;
        start_string++;
    }else if(str[start_string] == '+')
    {
        start_string++;
    }
    //开始正式计算
    int res = 0;
    for(int i=start_string; i<=end_string; ++i)
    {
        int ele =  str[i] - '0';
        //每个元素判断
        if(ele > 9 || ele <0)
            break;
        //正数的情况下
        if(positive)
        {
            res = res * 10 + ele;
            //判断是否溢出
            if(res > 0x7fffffff)
                return 0x7fffffff;
        }
        else
        {
            res = res * 10 - ele;
            //判断负数是否溢出
            if(res < 0x80000000)
                return 0x80000000;
        }
    }

    return (int)res;
}

猜你喜欢

转载自www.cnblogs.com/andyniu/p/9083635.html