首页 > 代码库 > LeetCode OJ String to Integer (atoi) 字符串转数字

LeetCode OJ String to Integer (atoi) 字符串转数字

 1 #include <iostream> 2 #include <assert.h> 3 using namespace std; 4 int ato(const char *str) { 5     int i=0,e=0,s=0; 6     int max=2147483647,min=-2147483648; 7     int f=1; 8     int tem[10]={0}; 9     unsigned int pan=0;10     while(*str== ){    //过滤掉连续空格11         str++;12         }13     if(*str==-||*str==+||(*str<=9&&*str>=0)){14         if(*str==-||*str==+){    //过滤掉正负号15             if(*str==-)16                 f=-1;17             str++;18         }19         while(*str==0)    //过滤掉前面的无用的020             str++;21         if( *str<=9&&*str>=0 ){        //过滤掉非数字的字符22 23             while( *str!=\0){            //判断字符串是否结束24                 if( *str>9||*str<0 )    //字符串还没结束,就出现非数字字符25                     break;        26                 if( i==10 ){            //大于10位的数字都要作溢出处理27                     if(f==-1)28                         return min;29                     else30                         return max;31                 }32                 tem[i++]=*str-0;33                 e=e*10+(*str-0);34                 str++;35             }36             if(i==10){            //刚好10位,需要特殊处理37                 if(f==-1){    //负数处理38                     if(tem[0]>2){    //超过30,0000,000039                         return min;40                     }41                     for(i=0;i<10;i++){42                         pan=pan*10+tem[i];43                     }44                     if(pan>=2147483648)  //  负数的绝对值大于等于214748364845                         return min;46                 }47                 else{    //正数处理48                     if(tem[0]>2){49                         return max;50                     }51                     for(i=0;i<10;i++){52                         pan=pan*10+tem[i];53                     }54                     if(pan>=2147483647)  //  负数的绝对值大于等于214748364855                         return max;56                 }57             }58             return f*e;59         }60         else61             return 0;62     }63     return 0;64 }65 int main(){66     char str[1000];67     int qq=0;68     while(cin>>str){69         qq=ato(str);70         cout<<qq<<endl;71     }72     return 0;73 }

 

这个东西原来挺难考虑周全的,还好leetcode会指出是输入什么数据会输出错误,不然估计找一辈子了。

鉴于这么苛刻的条件,贴出自己的不简洁的代码,这道题第一次AC。

以后有好办法再修改。

LeetCode OJ String to Integer (atoi) 字符串转数字