zoukankan      html  css  js  c++  java
  • [Leetcode]-String to Integer (atoi)

    mplement 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.

    Update (2015-02-10):
    The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.

    题目:字串转整数
    注意:细节部分非常多,须要考虑非常多情况
    1、int溢出推断
    2、正负号,详细情况见main函数中
    3、含有空格的情况
    结果:4ms

    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <limits.h>
    int myAtoi(char* str) {
       //"NULL"  "000234"  "+23" "-34" "+-34"  "    010"
        if(NULL == str )        
            return 0;    
        int sum  = 0.0;
        int f  = 0;
        int DIV = INT_MAX/10;
        while('' != *str)    
        {        
            if(*str == '+')
            {
                str++;
                if(*str < '0' || *str > '9') return 0;
                else    f = 0;
            }
            if(*str == '-')
            {
                str++;
                if(*str < '0' || *str > '9') return 0;
                else    f = 1;
            }
    
            if(*str >= '0' && *str<= '9' )
            {
                if(sum > DIV && f == 0) return INT_MAX;
                if(sum > DIV && f == 1) return -INT_MAX-1;
    
                sum = sum * 10.0;
    
                if(INT_MAX - *str + '0' < sum  && f == 0)       return INT_MAX;
                if((INT_MAX - (*str - '0') < sum ) && (f == 1)) return -INT_MAX-1;
    
                sum = sum + *str - '0';
    
                str++;
                if(*str == '')                    break;
                else if(*str < '0' || *str > '9')   break;
            }
            else
            {
                if(*str >= 'a' && *str <= 'z' )     break;
                str++;
            }
        }
        if(f) sum = -sum; 
        return sum;
    }
    int main()
    {
        char *str = "0034";
        int r = myAtoi(str);
        printf("myAtoi str0 is : %d
    ",r);
    
        char *str1 = "00";
        int r1 = myAtoi(str1);
        printf("myAtoi str1 is : %d
    ",r1);
    
        char *str2 = "+23";
        int r2 = myAtoi(str2);
        printf("myAtoi str2 is : %d
    ",r2);
    
        char *str3 = "-2345";
        int r3 = myAtoi(str3);
        printf("myAtoi str3 is : %d
    ",r3);
    
        char *str4 = "+-23";
        int r4 = myAtoi(str4);
        printf("myAtoi str4 is : %d
    ",r4);//  expected 0
    
        char *str5 = "    010";
        int r5 = myAtoi(str5);
        printf("myAtoi str5 is : %d
    ",r5);
    
        char *str6 = "    +0104";
        int r6 = myAtoi(str6);
        printf("myAtoi str6 is : %d
    ",r6);
    
        char *str7 = "    -0187";
        int r7 = myAtoi(str7);
        printf("myAtoi str7 is : %d
    ",r7);//  expected -187
    
        char *str8 = "    -018a567";
        int r8 = myAtoi(str8);
        printf("myAtoi str8 is : %d
    ",r8); //  expected -18
    
        char *str9 = "2147483648";
        int r9 = myAtoi(str9);
        printf("myAtoi str9 is : %d
    ",r9); //  expected 2147483647  因为越界,仅仅取最大
    
        char *str10 = "-2147483649";
        int r10 = myAtoi(str10);
        printf("myAtoi str10 is : %d
    ",r10); //  expected -2147483648 
    
        char *str11 = "- 204";
        int r11 = myAtoi(str11);
        printf("myAtoi str11 is : %d
    ",r11); //  expected 0  
    
        char *str12 = "b3424242";
        int r12 = myAtoi(str12);
        printf("myAtoi str12 is : %d
    ",r12); //  expected 0  
    
        while(0);
    }
  • 相关阅读:
    kali linux DVWA config 问题解决方案
    HashMap&线程
    Synchronized和java.util.concurrent.locks.Lockde区别联系
    线程池
    信息嗅探
    java子类对象和成员变量的隐写&方法重写
    Java中Super和final关键字以及异常类
    523. Continuous Subarray Sum
    494. Target Sum
    477. Total Hamming Distance
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5059513.html
Copyright © 2011-2022 走看看