int atoi(const char * str)

#include <stdlib.h>
  int atoi( const char *str );

功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换并将结果返回。例如,

    i = atoi( "512.035" );

i 的值为 512.


自己写的实现如下:

//根据位数返回10的整倍数,如2位则返回10,3位返回100
int my_base(int iBitCount)
{
	if (1 == iBitCount)
	{
		return 1;
	}
	else
	{
		return 10 * my_base(--iBitCount);
	}
}

int my_atoi(const char * pstr)
{
	int sum = 0;
	if (!pstr)  //指针若为空返回0
	{
		return sum;
	}
	const char * p = pstr;
	const char * pTemp;
	int iBitcount = 0; //有效数字字符位数
	int sign = 1;  //符号
	//让指针指向不为' '的字符
	while (*p == ' ')  
	{
		++p;
	}

	//首先判断转换后的整数是为正数还是负数
	if (*p == '-' || *p == '+') 
	{
		if (*p == '-')
		{
			sign = -1;
		}
		++p;
	}

	//若除去符号位的第一位不为数字字符,则返回0
	if (*p < '0' || *p > '9') 
	{
		return sum;
	}

	//如果除去符号位后字符串第一位为‘0’,则找到其第一个不为‘0’的位置
	if (*p == '0')  
	{
		while (*p == '0')
		{
			p++;
		}
		pTemp = p;
		p = pTemp;  //p指向字符串第一个不为'0'的位置
	}
	pTemp = p;  //保存p的值,这里的p始终指向字符串第一个不为'0'的位置

	//统计字符串转换为整数后的位数,扫描字符串的每一位必须保证是数字字符
	while (*p != '\0' && (*p >= '0' && *p <= '9'))  
	{
		++iBitcount;
		++p;
	}

	p = pTemp; //p指向字符串第一个不为'0'的位置
	while (*p != '\0' && (*p >= '0' && *p <= '9'))
	{
		sum += (*p - '0') * my_base(iBitcount);  //*p - '0'将字符转换为对应的整型数字,并乘以该字符转换为整数后其对应的整数基数
		++p;
		--iBitcount;
	}
	return sum * sign;  //返回值要带上符号
}

PS:若iBitcount >= 11,则转换后的整数已经溢出;若iBitCount = 10 && sum >2147483647,则转换后的整数也已经溢出。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值