天天看點

itoa和atoi itoa和atoi 

itoa和atoi 

Posted on  11/04/2012 | 被浏覽了  237 次

再貼個自己寫的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中發現的,看來以前看書不認真啊= =