经典面试题 atoi&itoa

 

long  atol(const char *nptr)
{
	int c; /* current char */
	long total; /* current total */
	int sign; /* if ''-'', then negative, otherwise positive */

	/* skip whitespace */
	while ( isspace((int)(unsigned char)*nptr) )
	++nptr;

	c = (int)(unsigned char)*nptr++;
	sign = c; 
	if (c == ''-'' || c == ''+'')
		c = (int)(unsigned char)*nptr++; 

	total = 0;

	while (isdigit(c)) {
	total = 10 * total + (c - ''0''); /* accumulate digit */
	c = (int)(unsigned char)*nptr++; /* get next char */

	}

	if (sign == ''-'')
		return -total;
	else
		return total; /* return result, negated if necessary */
}

 

 

char* _itoa(int value, char* string, int radix)
{
	char tmp[33];
	char* tp = tmp;
	int i;
	unsigned v;
	int sign;
	char* sp;

	if (radix > 36 || radix <= 1)
	{
		__set_errno(EDOM);
		return 0;
	}

	sign = (radix == 10 && value < 0);
	if (sign)
		v = -value;
	else
		v = (unsigned)value;

	while (v || tp == tmp)
	{
	i = v % radix;
	v = v / radix;
	if (i < 10)
		*tp++ = i+''0'';
	else
		*tp++ = i + ''a'' - 10;
	}

	if (string == 0)
		string = (char*)malloc((tp-tmp)+sign+1);
	sp = string;

	if (sign)
		*sp++ = ''-'';
	while (tp > tmp)
	*sp++ = *--tp;
	*sp = 0;
	
	return string;
}

转载于:https://www.cnblogs.com/caleb/archive/2011/09/13/2174967.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值