zoukankan      html  css  js  c++  java
  • 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;
    }

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

  • 相关阅读:
    22、栈的应用-中缀表达式转后缀表达式
    21、栈的应用-就近匹配
    20、双向链表
    19、链式栈
    Eclipse 重新加载插件
    Asp.net web form 使用IOC(Unity) 构造函数注入Page,.net Framework 4.7.2
    asp.net webform 多语言
    sql server 生成数字辅助表
    查询指定数据库的慢语句
    2008 sql 揭秘 第4章的数据库脚本
  • 原文地址:https://www.cnblogs.com/wkx12/p/5464872.html
Copyright © 2011-2022 走看看