008将字符串转换为整数

题目描述

输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。

给定函数原型int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。

思路:对于字符串“123”,计算过程是n = n*10 + c,其中,n是最后所求数字,c是当前数字,线性扫描即可

但是还需要考虑其他问题,一是空指针;二是符号问题,“+”,“-”;三是非法字符问题;四是整数溢出。

空指针直接退出,符号用sign表示,非法字符用isDigit()进行判断,对于整数溢出,

当整数发生溢出时,取最大或最小的int值,int的表示范围是MAX_INT:2147483647,MIN_INT:-2147483648。

判断n与MAX_INT和MIN_INT的关系,如果n>MAX_INT/10,那么n=n*10+c必然大于MAX_INT,如果n==MAX_INT,则判断c和MAX_INT%10的关系,如果c>MAX_INT%10,那么n=n*10+c>MAX_INT,对于MIN_INT,判断方法相似,只不过MIN_INT = -MAX_INT-1,需要单独判断

bool isDigit(char c)
{
	if(c>='0' && c<='9')
		return true;
	return false;
}
bool isSpace(char c)
{
	if(c == ' ')
		return true;
	return false;
}

int StrtoInt(const char *string)
{
	const int MAX_INT = 2147483647;
	const int MIN_INT = -2147483648;
	unsigned int n = 0;
	const char* str = string ;

	while(isSpace(*str))
	{
		str ++;
	}
	bool sign = true;
	if(*str == '-')
	{
		sign = false;
		str++;
	}else if(*str == '+')
	{
		str++;
	}else if(isDigit(*str))
	{	

	}else 
	{
		return 0;
	}
	while(isDigit(*str))
	{
		int c = *str - '0';
		if(sign && (n>MAX_INT/10 || (n==MAX_INT/10 && c > MAX_INT%10)))
		{
			return MAX_INT;
		}
		else if( !sign && (n>(unsigned)MIN_INT/10) || (n==(unsigned)MIN_INT/10 && c> (unsigned)MIN_INT%10))
		{
			return MIN_INT;
		}else
		{
			n = n*10 +c;
			str ++;
		}
	}
	if(*str == '\0')
	{
		 
		if(sign)
		{
			return n; 
		}else
		{
			return -1 * n;
		}
	}
	return 0;

}

举一反三

  1. 实现string到double的转换《待续。。。》

分析:此题虽然类似于atoi函数,但毕竟double为64位,而且支持小数,因而边界条件更加严格,写代码时需要更加注意。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值