myitoa 和 myatoi

字符串的转换 是重点的重点 

myatoi 

数字串字符转数字要考虑10进制以上会有字母的出现

所以要将字母转换成数字

int myatoi(const char* str)
{
	int tmp=0;//保存值
	const char* p = str;
	while (*p != '\0')
	{
		if (isdigit(*p))//判断是否为数字的函数
		{
			tmp = tmp * 10 + (*p - '0');//处理数字
		}
		if (isupper(*p))//判断是否为大写字母的函数
		{
			tmp = tmp * 10 + (*p - 'A' + 10);//处理大写字母
		}
		if (islower(*p))//判断是否为小写字母的函数
		{
			tmp = tmp * 10 + (*p - 'a' + 10);//处理小写字母
		}
		p++;
	}
	return tmp;
}
int main()
{
	const char* str = "asd1234";
	printf("%d\n", myatoi(str));
	return 0;
}

myitoa 

将数字转换成字符串(带进制转换)

核心思想是 eg 12345 简单的方法就是 取个位放入数组arr里面 然后进行数字交换

char* myitoa(int n, int index)
{
	int count = 0;//计数n到底几位数
	int temp = n;
	while (temp!= 0)
	{ 
		temp /= index;
		count++;
	}
	int tmp = 0;
	char* arr = (char*)malloc((count*2)* sizeof(char));//创建动态内存 保存字符串
	assert(arr != NULL);
	if(arr==NULL)
	{
		return NULL;
	}
	int i = 0;
	int sum;
	while (n != 0)
	{	    
		tmp = n % index;//保存个位数的值
		if (tmp > 10)
		{
			sum=  tmp+ 'A'-10;
		}
		else
		{
			sum = tmp + '0';
		}
			arr[i] = sum;
			n /= index;	
		i++;
	}
	arr[i] = '\0';
		i--;
	char tmp1 = 0; //字符数组交换的时候 应该要定义char的中间值
/*           数组交换 */
	for (int j = 0; j < i; j++, i--)
	{
		tmp1 = arr[j];
		arr[j] = arr[i];
		arr[i] = tmp1;
	}
	return arr;
}
int main()
{
	int n = 124563;
	int index = 16;
	char* p = myitoa(n,index);
	printf("%s\n", p);
	free(p);//记得释放内存
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值