• 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;
    }

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

  • 相关阅读:
    Atom | 编辑器Atom的使用小结
    离散数学 | ∅ 与 {∅} 出现在离散数学幂集合中
    Excel | 如何用Excel实现证件照底色调换
    Awesome图标 | 如何在某些编辑软件中使用Font Awesome字体图标
    将SSH的秘钥每次输入的密码去掉
    用canvas 画一个水位波纹上升下降的进度球
    解决Enter passphrase for key '/Users/mac/.ssh/id_rsa':的问题
    vue 注册全局过滤器
    解决vue的父组件打开子组件弹窗只走一次mounted的问题
    forEach终止循环的方法
  • 原文地址:https://www.cnblogs.com/wkx12/p/5464872.html
Copyright © 2020-2023  润新知