找工作之“整数转化为字符串---itoa实现“

整数转化为字符串,就是itoa函数(http://www.cplusplus.com/reference/cstdlib/itoa/),例如输入123,得到字符串“123”。还算简单,自己实现一下还是比较有意思的。

/***************
最初的版本
****************/
void convIntToStr(int n)
{
	int signFlag = 0;
	char str[10];
	int bitsNum = 0;
	int i = 0;

	if(n < 0)
	{
		signFlag = 1;
		 n = -n;
	}

	for( ; ;)
	{
		unsigned int quotient = 0;
		unsigned int remainder = 0;
		
		
		quotient = n / 10;
		remainder = n % 10;
		str[bitsNum++] = remainder + '0';
		n = quotient;

		if(quotient == 0)
			break;
	}

	if(1 == signFlag)
		printf("-");
	for(i = bitsNum -1; i >= 0; --i )
		printf("%c",str[i]);
		//putchar(str[i]);
}

//"递归实现" 方案
void convIntToStr2(int n)
{
	if(n < 0)
	{
		putchar('-');
		n = -n;
	}

	if( n / 10)
		convIntToStr2(n / 10);
	putchar(n % 10 + '0');
}

//字符串倒序函数
void reverse(char s[])
{
	int i = 0, j = 0;
	char c = '0';

	for(i = 0, j = strlen(s) - 1; i < j; ++i, --j)
	{
		c = s[i]; s[i] = s[j]; s[j] = c;
	}
}

//参考“c语言程序设计一书”优化的版本。
void convIntToStr3(int n)
{
	int sign = 0, i = 0;
	char str[10];
	char * p = str;

	if((sign = n) < 0)	
		n = -n;
	

	do{
		str[i++] = n % 10 + '0';		
	}while((n /= 10) > 0);

	if(sign < 0)
		str[i++] = '-';
	str[i] = '\0';

	reverse(str);

	while(*p)
		putchar(*p++);			
}

/**
* 网上找的“很牛逼的解决方案”----大牛写的实现就是不一样啊。。。
*/
char * itoa(int value, char * result, int base) 
{
	// check that the base if valid
	if (base < 2 || base > 36) 
	{ 
		*result = '\0';
		return result; 
	}

	char * ptr = result, * ptr1 = result, tmp_char;
	int tmp_value;

	do {
		tmp_value = value;
		value /= base;
		*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
	} while(value);

	// Apply negative sign
	if (tmp_value < 0) 
		*ptr++ = '-';
	
	*ptr-- = '\0';
	
	while(ptr1 < ptr) 
	{
		tmp_char = *ptr;
		*ptr--   = *ptr1;
		*ptr1++  = tmp_char;
	}
	
	return result;
}

测试无误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coffee_baba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值