博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把十进制的字符串转换为数字
阅读量:5347 次
发布时间:2019-06-15

本文共 1040 字,大约阅读时间需要 3 分钟。

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

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

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

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

你可能感兴趣的文章
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
参数范围的选择
查看>>
使用 MarkDown & DocFX 升级 Rafy 帮助文档
查看>>
THUPC2019/CTS2019/APIO2019游记
查看>>
Nodejs Express模块server.address().address为::
查看>>
4.3.5 Sticks (POJ1011)
查看>>
POJ 2960 S-Nim 博弈论 sg函数
查看>>
Dijkstra模版
查看>>
一个简单的插件式后台任务管理程序
查看>>
GDB调试多进程程序
查看>>
组合数
查看>>
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>
shiro的rememberMe不生效
查看>>
const 不兼容的类型限定符问题
查看>>
OpenCV的配置
查看>>