再贴个自己写的itoa和atoi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <cstdio>
#include <cstring>
#include <cctype>
void
reverse(
char
s[])
{
int
n =
strlen
(s);
for
(
int
i = 0, j = n-1; i < j; i++, j--)
{
char
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
int
atoi
(
char
s[])
{
int
i, n, sign;
for
(i = 0;
isspace
(s[i]); i++)
;
sign = (s[i] ==
'-'
)?-1:1;
if
(s[i] ==
'-'
|| s[i] ==
'+'
)
i++;
for
(n = 0;
isdigit
(s[i]); i++)
n = 10*n + (s[i] -
'0'
);
return
n*sign;
}
void
itoa(
int
n,
char
s[])
{
int
i = 0, sign = n;
if
(n < 0) n = -n;
do
{
s[i++] = n%10 +
'0'
;
n /= 10;
}
while
(n);
if
(sign < 0) s[i++] =
'-'
;
s[i] =
'\0'
;
reverse(s);
}
int
main()
{
char
s[20];
printf
(
"%d\n"
,
atoi
(
"-525"
));
itoa(-525, s);
printf
(
"%s\n"
, s);
}
|
atoi是stdlib.h中的函数,而itoa不属于标准函数,我的atoi没有考虑溢出问题,如果要考虑,写起来还挺麻烦的,具体可以参考标准库中的实现。
itoa上次面试的时候碰到了,没有想到逆序输出,最后reverse这种方法,这个方法是在K&R的经典C中发现的,看来以前看书不认真啊= =