LeetCode-第八题:String to Integer

2016-10-29  本文已影响0人  baixiaoshuai

题目

leetCode.png

分析

完整代码

    #include <stdio.h>
    #include<string.h>
    #include<limits.h>
    int myAtoi(char* str);
    int main()
    {
        
           char str[12]="2147483648";
        printf("int_max=%d,%d\n",INT_MAX,myAtoi(str)); 
           return 0;
    }
    
    int myAtoi(char* str) 
    {
        if(str==NULL)
        {
            return 0;
        }
        long long int total=0;
        int ispositive=1;//判断是否是负数 
        int i;
        for(i=0;i<strlen(str);i++)
        {
            if(isspace(str[i]))//跳过空格 
            {
                continue;
            }
            else//字符开始 
            {
                if(str[i]=='-')//判断正负 
                {
                    ispositive=0-1;
                    i++;
                }
                else if(str[i]=='+')
                {
                    i++;    
                }
                int j; 
                for(j=i;j<strlen(str);j++)
                {
                    switch(str[j])
                    {
                        case '0':
                        {
                            total=total*10+0;
                            break;  
                        }
                        case '1':
                        {
                            total=total*10+1;
                            break;      
                        }
                        case '2':
                        {
                            total=total*10+2;
                            break;
                        }
                        case '3':
                        {
                            total=total*10+3;
                            break;
                        }
                        case '4':
                        {
                            total=total*10+4;
                            break;
                        }
                        case '5':
                        {
                            total=total*10+5;
                            break;
                        }
                        case '6':
                        {
                            total=total*10+6;
                            break;      
                        }
                        case '7':
                        {
                            total=total*10+7;
                            break;
                        }
                        case '8':
                        {
                            total=total*10+8;
                            break;
                        }
                        case '9':
                        {
                            total=total*10+9;
                            break;
                        }
                        default:
                        {
                            return total*ispositive;
                            break;
                        }   
                    }
                    if(ispositive==1)//判断是否越界
                    {
                        if(total>INT_MAX)
                        {
                            return INT_MAX;
                        }
                    }
                    else
                    {
                        if(ispositive*total<INT_MIN)
                        {
                            return INT_MIN;
                        }
                    }
                }
                break;
            }
        }
        return total*ispositive;
    }

后记

上一篇下一篇

猜你喜欢

热点阅读