把十进制的字符串转换为数字

    昨天在某论坛看到大家在讨论几个面试题,其中一个是把十进制的字符串转换为数字。看到很多人的回复就是几个字“太简单了!”。看完这些人的回复后,我就在想,真的那么简单吗?如果不要求异常处理的话,的确不难;要如果要求异常处理,就很难把异常情况考虑全了。

    要想把异常情况都考虑全,只有在单元测试用例上多下功夫了。

    下面是把十进制字符串转换为数字的函数代码,添加了异常处理,但却为对异常进行分类。

int DecToInt( const char * pcInput)
{
if (NULL == pcInput)
{
throw - 1 ;
}

int iRet = 0 ;

int iSign = 1 ;
int iIdx = 0 ;

/* 判断输入是不是负数 */
if ( ' - ' == pcInput[ 0 ])
{
iSign
= - 1 ;
iIdx
++ ;
}
else if ('+' == pcInput[0])
{
iSign = 1;
iIdx
++;
}
else
{
}


while (pcInput[iIdx])
{
/* 判断单个字符是不是数字,如果不是,抛出异常 */
int iNum = pcInput[iIdx] - ' 0 ' ;
if ((iNum < 0 ) || (iNum > 9 ))
{
throw - 1 ;
}

/* 判断是否越界,如果越界,抛出异常 */
int iMax = ~ ( 1 << ( 8 * sizeof ( int ) - 1 ));
if ((iMax / 10 < iRet) || ((iMax - ( 10 * iRet)) < iNum))
{
throw - 1 ;
}

iRet
= ( 10 * iRet) + iNum;

iIdx
++ ;
}

/* 字符串为空时,抛出异常 */
if ( 0 == iIdx)
{
throw - 1 ;
}

iRet
= iRet * iSign;

return iRet;
}

    其中,使用的单元测试用例分别是:

"0";

"1234";

"+1234";

"-1234";

"2147483647"

"-2147483647"

"2147483648"

"-2147483648"

"12k12"

""

NULL

转载于:https://www.cnblogs.com/xianyunhe/archive/2011/07/10/2101938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值