重寫庫函式 atoi

2022-04-10 11:57:32 字數 1021 閱讀 3881

1. 若字串開頭是空格,則跳過所有空格,到第乙個非空格字元,如果沒有,則返回0.

2. 若第乙個非空格字元是符號+/-,則標記ispositive的真假,這道題還有個侷限性,那就是在c++裡面,+-1和-+1都是認可的,都是-1,而在此題裡,則會返回0.

3. 若下乙個字元不是數字,則返回0. 完全不考慮小數點和自然數的情況,不過這樣也好,起碼省事了不少。

4. 如果下乙個字元是數字,則轉為整形存下來,若接下來再有非數字出現,則返回目前的結果。

5.還需要考慮邊界問題,如果超過了整形數的範圍,則用邊界值替代當前值

空字串:null;

有符號的字串:+123,-123,+0,-0;

有前導space的字串:spacespace123,spacespace-123;

邊界值: int_max (2147483647) or int_min (-2147483648)

混有其它字元的字串:-123a45(這時的返回值要為-123)

int myatoi(string str) 

//去除前面的空格字元

for(i = 0; i < str.size(); i++)

//if

}//for

//判斷符號

if(str[i] == '+')

else if(str[i] == '-')

else{}

//提取數值

for(;i < str.size(); i++)

if(res > int_max / 10 || (res == int_max / 10 && (str[i] - '0') >= 8))

res = res * 10 + (str[i] - '0');

}//for

return ispositive ? res : (-res);

}

注意:判斷乙個數是否會越界,不能等它越界了再去判斷,要在它越界之前判斷它和int_max/10的大小關係。

編寫atoi庫函式

看到很多面試書和部落格都提到編寫atoi函式,在很多面試中面試官都會要求應聘者當場寫出atoi函式的實現 但基本很少人能寫的完全正確,倒不是這道題有多麼高深的演算法,有多麼複雜的資料結構,只因為這道題要考慮的情況比較多,大部分應聘者都沒能把所有情況都考慮到,能很好的考察應聘者的程式設計基本功和思考問...

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