8、LeetCode--String to Integer (atoi)

question:Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

问题的大意:将字符串换成integar,需要注意的是输入的格式,我会在代码中进行讲解

方法一:

与方法二的思想是一样的,代码的解释可参照方法二

int myAtoi(char* str) {
    int len = strlen(str);
    int max = INT_MAX;
    int min = INT_MIN;
    long num = 0;
    int i = 0;
    int flag = 1;
    
    while(str[i] == ' ' || str[i] == '	')
        i++;
    
    if(str[i] == '+' || str[i] == '-')
    {
        if(str[i] == '-')
            flag = 0;
    }
    else
    {    
        if(str[i] >= '0' && str[i] <= '9')
            num = str[i] - '0';
        else
            return 0;    
    }
    
    for(i = i+1; i < len; i++)
    {
        if(str[i] >= '0' && str[i] <= '9')
        {
            num = 10 * num + str[i] - '0';
            if(flag && (num > max))
                return max;
            if(!flag && (-num < min))
                return min;
        }
        else
            break;
    }
    
    if(!flag)
        num = -num;
    
    return (int)num;
}

方法二:

int myAtoi(char* str) {
    char *p = str;
    int max = INT_MAX;
    int min = INT_MIN;
    long num = 0;                       // 注意类型要大于int类型
    int flag = 1;                       // 作为正负的标志
    
    while(*p == ' ' || *p == '	')      // 过滤掉字符串开始的无用字符
        p++;
    
    if(*p == '+' || *p == '-')
    {
        if(*p == '-')                   // 如果为负数,标记为0
            flag = 0;
    }
    else
    {    
        if(*p >= '0' && *p <= '9')
            num = *p - '0';
        else                            // 格式不符合,返回0
            return 0;                   
    }
    
    for(++p; *p; p++)
    {
        if(*p >= '0' && *p <= '9')
        {
            num = 10 * num + *p - '0';
            if(flag && (num > max))     // 为正数,且当前num大于int类型上界,返回INT_MAX
                return max;
            if(!flag && (-num < min))   // 为负数,且当前num小于int类型下界,返回INT_MIN
                return min;
        }
        else
            break;
    }
    
    if(!flag)                          // 为负数,反转
        num = -num;
    
    return (int)num;
}

采用指针的方式来遍历字符串,相比方法一更简洁

原文地址:https://www.cnblogs.com/wkx12/p/5464872.html