itoa和atoi

itoa和atoi 

再贴个自己写的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中发现的,看来以前看书不认真啊= =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值