寫atoi函數(shù)的時(shí)候需要注意一下幾點(diǎn)
1. 字符串前的空白
2. 字符串所表示數(shù)值的正負(fù)號
3. 結(jié)束條件,遇到非數(shù)字或者字符'\0'結(jié)束
4. 考慮溢出,分別與int值所能表示的最大(0x7fffffff)和最小值(0x8000000)進(jìn)行比較
5. 考慮異常輸入情況下,用全局變量valid來標(biāo)識,對于"+/-" ?"0" "+abc"需要進(jìn)行區(qū)分
?
1
#define
INT_MAX ((int)0x7FFFFFFF)
2
#define
INT_MIN ((int)0x80000000)
3
//
#define INT_MAX (~(unsigned int)0/2)
4
5
bool
valid=
true
;
6
7
int
myatoi(
const
char
*
str)
8
{
9
bool
minus=
false
;
10
long
long
result=
0
;
11
valid=
false
;
12
if
(str==
NULL)
13
return
0
;
14
while
(*str==
'
'
)
15
str++
;
16
if
(*str==
'
-
'
)
17
{
18
minus=
true
;
19
str++
;
20
}
21
else
if
(*str==
'
+
'
)
22
str++
;
23
if
(*str<
'
0
'
||*str>
'
9
'
)
24
return
0
;
25
26
valid=
true
;
27
while
(*str>=
'
0
'
&& *str<=
'
9
'
)
28
{
29
result=result*
10
+*str-
'
0
'
;
30
if
((minus && result>INT_MAX + 1LL) || (!minus && result>
INT_MAX))
31
{
32
valid=
false
;
33
return
0
;
34
}
35
36
str++
;
37
}
38
39
if
(minus)
40
result*=-
1
;
41
return
(
int
)result;
42
}
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

