首页 > 代码库 > String to Integer (atoi)
String to Integer (atoi)
原文:http://www.cnblogs.com/zsboy/p/3886677.html
问题:将字符窜转换成数字
分析:感觉题目不难,但是细节很多,容易想不到
1.数字前面有空格 如s=“ 123456”
2.数字前出现了不必要或多于的字符导致数字认证错误,输出0 如s=“ b1234” ,s=“ ++1233” , s=“ +-1121”
3.数字中出现了不必要的字符,返回字符前的数字 如s=“ 12a12” , s=“ 123 123”
4.数字越界 超过了范围(-2147483648--2147483647) 若超过了负数的 输出-2147483648 超过了正数的输出2147483647
在科普一个知识点,倘若某个数超过了2147483647则会变为负数,反过来一样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | class Solution { public : int atoi ( const char *str) { long long cur=0; //初始化老是忘记 int num=0,i=0; int flag1=0,flag2=0; while (str[i]!= ‘\0‘ && str[i]== ‘ ‘ ) i++; //开头空格舍弃 if (str[i]== ‘-‘ ) flag1++,i++; else if (str[i]== ‘+‘ ) flag2++,i++; for (; str[i]!= ‘\0‘ ; i++) { if (str[i]>= ‘0‘ && str[i]<= ‘9‘ ) { if (flag1==2) { cur=cur*10-(str[i]- ‘0‘ ); //这里是减法,因为cur符号是负号了 if (cur<-2147483648) return -2147483648; } else if (flag1==1) cur=-str[i]+ ‘0‘ ,flag1++; //将负数的符号记录到cur里 else { cur=cur*10+(str[i]- ‘0‘ ); if (cur>2147483647) return 2147483647; } } else break ; } num=( int )cur; return num; } }; |
String to Integer (atoi)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。