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