模擬實現 atoi 函式(C 版本)

2021-10-09 11:09:56 字數 1245 閱讀 7606

前言

只有注重**質量的程式設計師,才能寫出魯棒、穩定的大型軟體。往往我們容易忽略一些邊界條件、特殊輸入等看似細枝末節但實則至關重要的地方。我們在寫**時,應當不斷反思程式在思路或者**中存在那些漏洞。

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就 這樣就...