前言
只有注重**質量的程式設計師,才能寫出魯棒、穩定的大型軟體。往往我們容易忽略一些邊界條件、特殊輸入等看似細枝末節但實則至關重要的地方。我們在寫**時,應當不斷反思程式在思路或者**中存在那些漏洞。
atoi 函式的主要功能就是將乙個字串轉為整數,例如:將 「12345」 –> 12345。
1.1 錯誤解法
這個題目很簡單,很多人都會在三分鐘之內寫下如下不到10行的**:
#include
using
namespace std;
intmy_atoi
(char
* str)
return num;
}
這個**是有問題的,只要輸入乙個空指標,程式就會立即崩潰。其實看起來越是簡單的問題,其中有可能就暗藏玄機。除了完成基本功能外,還需要考慮到特殊輸入、邊界控制、錯誤處理、是否溢位等問題。
這樣一來,我們就不再認為這個題是乙個簡單題了。
1.2 正確解法
我們寫出的**不能只是完成最基本的功能,就本題來講不能僅僅滿足把字串轉換為整型這個最基本的要求,我們還需要考慮到以下問題:
特殊輸入:輸入的字串中有可能出現非數字字元或正負號,以及空指標。
考慮溢位:最大的正整數以及最小的負整數溢位問題。
錯誤處理:當輸入的字串不能轉換為整數時,應當如何進行錯誤處理。
我們經過思考寫出如下**:
#include
#include
#include
using
namespace std;
enum state
;enum state state = invalid;
intmy_atoi
(const
char
* str)
while
(isspace
(*str))if
(*str ==
'+')if(
*str ==
'-')
while
(*str)
}else
str++;}
state = valid;
return ret;
}
模擬實現atoi函式
atoi函式就是把一串字串轉換為int型整數的函式,通過將字串中的字元乙個乙個強制型別轉換,並且存入乙個臨時陣列中,再將陣列中的數字處理一下即可得到我們需要的整數。實現這個函式的過程中,我們需要注意負數的處理,要進行一次判斷,確定返回值的正負。其他的字元按照ascii碼表進行轉換即可。下面是 inc...
(C語言)模擬實現atoi函式
atoi函式 用法 將字串裡的數字字元轉換為整形數,然後返回整形值。注意事項 跳過前面的空格字元,遇到正負號或者數字開始轉換,直到遇到字串結束標誌 0 或非數字字元才結束轉換。用c語言模擬實現這個函式 vs2013 include include include include enum state...
atoi庫函式模擬實現
第一次嘗試 define crt secure no warnings include include intmyatoi const char str char ts ts 設定符號位,用來判定這樣的情況 不見可字元,數字,不可見字元,數字 如果前面為不可見字元,在遇到數字後,flag1就 這樣就...