日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写atoi库函数

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写atoi库函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  看到很多面試書和博客都提到編寫atoi函數,在很多面試中面試官都會要求應聘者當場寫出atoi函數的實現代碼,但基本很少人能寫的完全正確,倒不是這道題有多么高深的算法,有多么復雜的數據結構,只因為這道題要考慮的情況比較多,大部分應聘者都沒能把所有情況都考慮到,能很好的考察應聘者的編程基本功和思考問題全面性等能力。一看到這道題目我的第一反應是這么簡單啊,不就是把一個字符串轉化成整數嗎?然后速度寫下了實現代碼,然后測試了下,貌似結果也正確,然后再看了看書和博客上的實現,發現自己很多種情況都沒考慮進去,自己測試的也只是自己考慮的一兩種情況。

  這道題目要考慮的情況還真是很多,比如:如果傳的字符串指針為NULL;如果傳的字符串為空;如果傳的字符串中包含非法的字符;如果傳的字符串中包含+-符號;如果字符串代表的整數超過了整數能表示的范圍...,看了這么多情況,真心感覺實現這個函數還真不是件簡單的事,下面貼出我自己重新寫的atoi函數。

1 int myError = 0; 2 3 int atoi(const char *str) 4 { 5 bool is_f = false; 6 long long result = 0; 7 8 myError = 0; 9 if (str == NULL || *str == 0) 10 { 11 myError = -1; 12 return 0; 13 } 14 if (*str == '+' || *str == '-') 15 { 16 if (*str == '-') 17 is_f = true; 18 ++str; 19 if (*str == 0) 20 { 21 myError = -1; 22 return 0; 23 } 24 } 25 while (*str) 26 { 27 if (!(*str >= '0' && *str <= '9') || 28 (!is_f && result > 0x7fffffff) 29 || (is_f && result > 0x80000000)) 30 { 31 myError = -1; 32 return 0; 33 } 34 result = result * 10 + (*str - '0'); 35 ++str; 36 } 37 if((!is_f && result > 0x7fffffff) 38 || (is_f && result > 0x80000000)) 39 { 40 myError = -1; 41 return 0; 42 } 43 return is_f ? -((int)result) : (int)result; 44 }

  上面代碼我將出錯的代碼保存在myError全局變量中,因為如果用返回值來表示出錯,這個會與字符串代表的整數值產生混淆。上面的代碼自己測試了下貌似對應上面寫得各種情況都正確,不過寫得代碼質量不高,貼出來僅供分享,也許還有沒有考慮的情況。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的编写atoi库函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。