寫atoi函數的時候需要注意一下幾點
1. 字符串前的空白
2. 字符串所表示數值的正負號
3. 結束條件,遇到非數字或者字符'\0'結束
4. 考慮溢出,分別與int值所能表示的最大(0x7fffffff)和最小值(0x8000000)進行比較
5. 考慮異常輸入情況下,用全局變量valid來標識,對于"+/-" ?"0" "+abc"需要進行區分
?
1 #define INT_MAX ((int)0x7FFFFFFF) 2 #define INT_MIN ((int)0x80000000) 3 // #define INT_MAX (~(unsigned int)0/2) 4 5 bool valid= true ; 6 7 int myatoi( const char * str) 8 { 9 bool minus= false ; 10 long long result= 0 ; 11 valid= false ; 12 if (str== NULL) 13 return 0 ; 14 while (*str== ' ' ) 15 str++ ; 16 if (*str== ' - ' ) 17 { 18 minus= true ; 19 str++ ; 20 } 21 else if (*str== ' + ' ) 22 str++ ; 23 if (*str< ' 0 ' ||*str> ' 9 ' ) 24 return 0 ; 25 26 valid= true ; 27 while (*str>= ' 0 ' && *str<= ' 9 ' ) 28 { 29 result=result* 10 +*str- ' 0 ' ; 30 if ((minus && result>INT_MAX + 1LL) || (!minus && result> INT_MAX)) 31 { 32 valid= false ; 33 return 0 ; 34 } 35 36 str++ ; 37 } 38 39 if (minus) 40 result*=- 1 ; 41 return ( int )result; 42 }
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
