首页 > 代码库 > 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) 字符串转数字
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。