atoi_字符串数字转换为整型

实现字符串中的数字转换为整型,具体规则见源码注释。gcc编译通过。

 

第一种代码,过程有些繁琐:

#include<stdio.h>

/* 求幂
 * 此处求幂也可以调用math.h中的函数pow(),
 * 编译时添加“-lm”参数。 */
double mypow(double x,double y)
{
	int tmp=1;
	while(y-->0)
	{
		tmp*=x;
	}
	
	return tmp;
}

/* 转化字符串中的数字字符到整数。规则如下:
 * 	1、如果字符串开始是一个字母,则返回零;
 * 	2、否则,把数字字符转换成整型数,直到遇到字母字符为止。
 */
int myatoi(const char *str)
{
	int i=0,j=0,rslt=0;

	if(*str<'0'||*str>'9') return 0;

	while(*str>='0'&&*str<='9')
	{
		str++;
		i++;
	}

	while(i-->0)
	{
		rslt+=(int)mypow(10,j++)*(*--str-'0');
	}

	return rslt;
}

int main()
{
	char *strtest1="a1234",*strtest2="6789d";

	printf("%d\n%d\n",myatoi(strtest1),myatoi(strtest2));

	return 0;
}

 

 

另一段代码,对符号等做出判断,转换思路做出优化:

#include<stdio.h>

/* 转化字符串中的数字字符到整数。规则如下:
 * 	1、如果字符串开始是一个字母,则返回零;
 * 	2、否则,把数字字符转换成整型数,直到遇到字母字符为止;
 * 	3、另有符号空格等的判断。
 */
int myatoi(const char *str)
{
	int sign=1,rslt=0;

	while(' '==*str||'\t'==*str) str++;

	if('-'==*str)
	{
		sign=-1;
		str++;
	}
	else if('+'==*str) str++;

	while('0'==*str) str++;

	if(*str<'0'||*str>'9') return 0;

	while(*str>'0'&&*str<='9')
		rslt=rslt*10+(*str++-'0');

	return sign*rslt;
}

int main()
{
	char *strtest1="  1234",\
		*strtest2="-6789d",\
		*strtest3="+0324dk",\
		*strtest4="0043  5",\
		*strtest5="-s0012";

	printf(\
		"%d\n%d\n%d\n%d\n%d\n",\
		myatoi(strtest1),\
		myatoi(strtest2),\
		myatoi(strtest3),\
		myatoi(strtest4),\
		myatoi(strtest5)\
	);

	return 0;
}
 

 

May contact with me via e-mail: AllenNewOK@126.com

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值