昨天在某论坛看到大家在讨论几个面试题,其中一个是把十进制的字符串转换为数字。看到很多人的回复就是几个字“太简单了!”。看完这些人的回复后,我就在想,真的那么简单吗?如果不要求异常处理的话,的确不难;要如果要求异常处理,就很难把异常情况考虑全了。
要想把异常情况都考虑全,只有在单元测试用例上多下功夫了。
下面是把十进制字符串转换为数字的函数代码,添加了异常处理,但却为对异常进行分类。
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
{
}
其中,使用的单元测试用例分别是:
"0";
"1234";
"+1234";
"-1234";
"2147483647"
"-2147483647"
"2147483648"
"-2147483648"
"12k12"
""
NULL