c itoa函数的递归实现 及static小插曲

测试对静态变量声明及定义疑问同时,给出itoa函数(把整数转换为字符串)的实现。

#include<stdio.h>
#include<math.h>
#define MAXSIZE 100
char s[MAXSIZE];
void itoa1(int n, char s[])//该程序仅供测试静态声明,无法将负数正确转换 
{
	//起初思想:若为负数,则初次声明后,之后的声明定义语句可能直接跳过,就能实现对负数的转换。 
	if(n < 0)
	{
		n = -n;
		s[0] = '-';
		static int i = 1; // #1 c不允许重复声明定义,但可以在条件语句中加入,且初次声明定义后之后的声明语句当作赋值语句运行。 
	}
	if(n/10 > 0)
		itoa1(n / 10, s);
	static int i = 0;	// #2 n为负数时,该语句当作:i = 0;而非经初次声明定义后直接跳过。 
	s[i++] = n % 10 + '0';
	s[i] = '\0';
}

void itoa2(int n, char s[])//能转换,但不能处理最大负数的情况。 
{
	static int i = 0;
	if(n < 0)
	{
		n = -n;
		s[i++] = '-';
	}
	if(n/10 > 0)
		itoa2(n / 10, s);
	s[i++] = n % 10 + '0';
	s[i] = '\0';
}

void itoa3(int n, char s[])//nb 
{
	static int i;
	
	if(n / 10)
		itoa3(n / 10, s);
	else
	{
		i = 0;
		if(n < 0)
			s[i++] = '-';
	}
	s[i++] = abs(n % 10) + '0';
	s[i] = '\0';
}

int main()
{
	int num = -2147483648;
	itoa3(num, s);
	printf("%s", s, s[10]);
	return 0;
 } 

参考书目《the c program language》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值