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; } }; |