C语言_字符串转数字

C语言_字符串转数字

程序实现基础算法与思想
‘1‘ - ’0‘ —> 1;(字符1减字符0得到数字1)
’2‘ - ’0‘ —> 2;
----
‘9’ - ‘0’ —> 9;
*即:数字字符 - ’0‘ —> 对应的数字
( 注意:只能得到1~9,’10‘ - ’0‘无法得到10。)

测试用例:

int main()
{
	int a='1'-'0';
	//int a=‘2’-‘0’;
	//...
	printf("%d\n",a);

	return 0;
}

结果:
在这里插入图片描述

函数实现:
实现思想:逐个转换字符,将数字逐个“叠加”,最终得到所需数字。
例如字符串“143562”,
_____先将字符‘1’转换成数字1,存入变量tmp(此时tmp=1);
_____再将字符’4’转换成数字4,存入变量tmp(此时tmp=tmp✖10+4=14);
_____再将字符’3’转换成数字3,存入变量tmp(此时tmp=tmp✖10+3=143);

以此类推得到tmp=143562;

基本代码实现:

int Myatoi(const char *str)
{
	assert(str != NULL);//判空断言,与函数实现无关
	if(str==NULL)
		return 0;

	int tmp=0;
	while(*str !='\0')
	{
		tmp=tmp*10+(*str -'0');//获得数字并“叠加”
		str++;
	}

	return tmp;
}

int main()
{
	char str1[10]="123456";//测试用例
	char str2[10]="";

	printf("%d\n",Myatoi(str1));
	printf("%d\n",Myatoi(str2));

	return 0;
}

测试结果:
在这里插入图片描述

类推其他相关代码实现:

函数1(将字符串中所有数字提取并输出,例如“12ab12a”->1212)

int Myatoi(const char *str)
{
	assert(str != NULL);//判空断言,与函数实现无关
	if(str==NULL)
		return 0;

	int tmp=0;
	while(*str !='\0')

	{
		if(*str>'0' && *str<='9')//if(isdigit(*str)) 推荐使用函数isdigit,检查字符是否为字符‘0’~~‘9’
		{
			tmp=tmp*10+(*str -'0');//获得数字并“叠加”
		}
		str++;//指针后移
	}

	return tmp;
}

测试:

int main ()
{
	char str1[]="123456";
	char str2[]="0";
	char str3[]="abd123";
	char str4[]="123abc123";
	char str5[]="abc";

	printf("%d\n",Myatoi(str1));
	printf("%d\n",Myatoi(str2));
	printf("%d\n",Myatoi(str3));
	printf("%d\n",Myatoi(str4));
	printf("%d\n",Myatoi(str5));

return 0;
}

测试结果
在这里插入图片描述

函数2(遇其他字符直接结束,例如:“123”->123,“123a4”->123,“abc123”->0):

int Myatoi(const char *str)
{
   assert(str != NULL);//判空断言,与函数实现无关
   if(str==NULL)
	   return 0;

   int tmp=0;
   while(*str>'0' && *str<='9')
   //while(isdigit(*str))//推荐使用函数isdigit,检查字符是否为字符‘0’~~‘9’
   {
	   tmp=tmp*10+(*str -'0');//获得数字并“叠加”
	   str++;//指针后移
   }

   return tmp;
}

测试:

int main ()
{
	char str1[]="123456";
	char str2[10];
	char str3[]="0";
	char str4[]="abd123";
	char str5[]="123abc123";


	printf("%d\n",Myatoi(str1));
	printf("%d\n",Myatoi(str2));
	printf("%d\n",Myatoi(str3));
	printf("%d\n",Myatoi(str4));
	printf("%d\n",Myatoi(str5));


return 0;
}

测试结果:
在这里插入图片描述

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值