字符串转为整数

这是一个很经典的问题,有一次被笔试到,虽然之前看到过,知道主要的注意点,比较快的写了一个代码,但是在笔试完了的间隙,想到一个严重的bug,然后一面的时候和面试官说了,然后讲解了思路,面试官还算满意。等待二面时,无所事事的我还在想这道编程题,结果竟然又发现一个问题,少不得再忐忑不安和二面的面试官说新的发现。面试回去当天的晚上,有感于自己代码写的太少,就想编程实现这个小程序,结果很悲剧的,在写代码调试的过程中竟然又发现了一个考虑不周的地方,修复这个考虑不周的bug竟然又引入了一个新的bug。可以说,费了不少力气,才最终写出一个比较满意的程序。最大的感受是,一个问题,哪怕有比较完整的想法,也尽量去实现,因为在实现中你才能把所有隐藏的问题都揪出来,才能说,你真正解决了这个问题。附上代码,请各路英雄斧正。

#include<iostream>
#include<climits>
int cal_digit(const char chr)
{
	if(('0'<=chr)&&(chr<='9'))
	{
		return chr-'0';
	}
	return -1;
}

/**
1) err_state=0,normal
2) err_state=1,pa is NULL
3) err_state=2,input string exceed int range
4) err_state=3,input string contain illegal char
 */
int str2int( const char* pa,int &err_state)
{
	using namespace std;
	err_state=0;
	if(NULL==pa){
		err_state=1;
		return -1;
	}
	bool is_negative = 0;
	double int_max = INT_MAX;
	if(*pa=='+'){
		pa++;
	}
	if(*pa=='-')
	{
		pa++;
		is_negative = 1;
		//int_max = -1 * INT_MIN;
		int_max = -1.0 * INT_MIN  ;
	}

	double result=0;
	int digit;
	while(*pa){ 
		digit = cal_digit(*pa);
		if(digit == -1)
		{
			err_state=3;
			return -1;
		}
		else{
			result*=10;
			result+=digit;
			if(result>int_max)
			{
				err_state=2;
				return -1;
			}
		}
		pa++;
	}
	if(is_negative)
	{
		result=-result;
	}

	return int(result);
}

在这道简单的程序里,有几个地方特别说一下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值