写atoi函数的时候需要注意一下几点
1. 字符串前的空白
2. 字符串所表示数值的正负号
3. 结束条件,遇到非数字或者字符'\0'结束
4. 考虑溢出,分别与int值所能表示的最大(0x7fffffff)和最小值(0x8000000)进行比较
5. 考虑异常输入情况下,用全局变量valid来标识,对于"+/-" "0" "+abc"需要进行区分
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
}

