1
#include<stdio.h>
2
enum
Status {KValid =
0
, KInvalid};
3
int
g_nStatus =
KValid;
4
long
StrToIntCore(
char
*str,
bool
minus)
5
{
6
long
num =
0
;
7
while
(*str !=
'
\0
'
)
8
{
9
if
(*str >
'
0
'
&& *str<
'
9
'
)
10
{
11
int
flag = minus ? -
1
:
1
;
12
num = num *
10
+ flag*(*str -
'
0
'
);
13
if
((!minus && num >
0x7FFFFFFF
)||(minus && num <(signed
int
)
0x80000000
))
14
{
15
num =
0
;
16
break
;
17
}
18
str++
;
19
}
20
else
21
{
22
num =
0
;
23
break
;
24
}
25
}
26
if
(*str ==
'
\0
'
)
27
{
28
g_nStatus =
KValid;
29
}
30
return
num;
31
}
32
int
StrToInt(
char
*
str)
33
{
34
g_nStatus =
KInvalid;
35
long
num =
0
;
36
if
(*str != NULL && *str !=
'
\0
'
)
37
{
38
bool
minus =
false
;
39
if
(*str ==
'
+
'
)
40
str++
;
41
else
if
(*str ==
'
-
'
)
42
{
43
str++
;
44
minus =
true
;
45
}
46
if
(*str !=
'
\0
'
)
47
{
48
num =
StrToIntCore(str,minus);
49
}
50
}
51
return
int
(num);
52
}
53
54
void
main()
55
{
56
printf(
"
%d
"
,StrToInt(
"
-12
"
));
57
}
在前面的代码中,把空字符串“”和只有一个正号或负号的情况都考虑到了。同事还考虑整数的最大值是0x7fffffff,最小值0x80000000,一次要分两种情况判断溢出。

