看到很多面試書和部落格都提到編寫atoi函式,在很多面試中面試官都會要求應聘者當場寫出atoi函式的實現**,但基本很少人能寫的完全正確,倒不是這道題有多麼高深的演算法,有多麼複雜的資料結構,只因為這道題要考慮的情況比較多,大部分應聘者都沒能把所有情況都考慮到,能很好的考察應聘者的程式設計基本功和思考問題全面性等能力。一看到這道題目我的第一反應是這麼簡單啊,不就是把乙個字串轉化成整數嗎?然後速度寫下了實現**,然後測試了下,貌似結果也正確,然後再看了看書和部落格上的實現,發現自己很多種情況都沒考慮進去,自己測試的也只是自己考慮的一兩種情況。
這道題目要考慮的情況還真是很多,比如:如果傳的字串指標為null;如果傳的字串為空;如果傳的字串中包含非法的字元;如果傳的字串中包含+-符號;如果字串代表的整數超過了整數能表示的範圍...,看了這麼多情況,真心感覺實現這個函式還真不是件簡單的事,下面貼出我自己重新寫的atoi函式。
1int myerror = 0;2
3int atoi(const
char *str)414
if (*str == '
+' || *str == '-'
)1524}
25while (*str)
2634 result = result * 10 + (*str - '0'
);35 ++str;36}
37if((!is_f && result > 0x7fffffff
)38 || (is_f && result > 0x80000000
))39
43return is_f ? -((int)result) : (int
)result;
44 }
上面**我將出錯的**儲存在myerror全域性變數中,因為如果用返回值來表示出錯,這個會與字串代表的整數值產生混淆。上面的**自己測試了下貌似對應上面寫得各種情況都正確,不過寫得**質量不高,貼出來僅供分享,也許還有沒有考慮的情況。
重寫庫函式 atoi
1.若字串開頭是空格,則跳過所有空格,到第乙個非空格字元,如果沒有,則返回0.2.若第乙個非空格字元是符號 則標記ispositive的真假,這道題還有個侷限性,那就是在c 裡面,1和 1都是認可的,都是 1,而在此題裡,則會返回0.3.若下乙個字元不是數字,則返回0.完全不考慮小數點和自然數的情況...
庫函式atoi 的實現
int atoi const char nptr 假設第乙個非空格字元存在,是數字或者正負號則開始做型別轉換,之後檢測到非數字 包含結束符 0 字元時停止轉換。返回整形數。否則,返回零。這裡需注意 假設字串是非法輸入 字串為空,僅僅有乙個 或 非數字等返回的是整形數0 而假設輸入是 0 返回的也是整...
atoi庫函式模擬實現
第一次嘗試 define crt secure no warnings include include intmyatoi const char str char ts ts 設定符號位,用來判定這樣的情況 不見可字元,數字,不可見字元,數字 如果前面為不可見字元,在遇到數字後,flag1就 這樣就...