[C/C++] 把一个整型整数转成字符串
来源:互联网 发布:淘宝砖石展位 编辑:程序博客网 时间:2024/05/22 03:06
问题描述:写一个函数,接受一个整数(假定用int表示),输出该整数的字符串形式。采用如下函数原型:
void itoa ( int val, char* buf );
这里假定buf足够大以容纳任何int类型数值的字符串。
这个问题,初看好像没有什么难度。如果是0,就直接输出'0';如果是正数,就通过取模(%)和求商(/)运算可以逐位取得该整数的数字,并把它们放到buf中去;如果是个负数,就先转成正的,然后在最后输出时加入负号。按照这个思路,可以写下如下代码:
一切看起来都没有问题。但是,如果我们这样调用该函数的话,猜猜会输出什么:
我们得到的是"-"。这是为什么呢?大家请注意第11行代码。当我们求一负数的绝对值时,如果还是用原来大小的有符号类型时,可能会产生溢出!我们知道,int类型只能表示-231 ~ 231 -1 之间的数值。如果我们对-231 求绝对值并把它存放到int类型的变量中,会发生什么情况?分析到这里,大家都应该清楚了吧!
这个bug是很隐蔽的。我在网上看到的代码基本上都和上面给出的差不多,没有考虑这个可能的溢出问题。修正的办法,就是用更大的类型来存放绝对值。观察到绝对值是非负的,我们可以用一个unsigned int 来表示绝对值,这样就不会有问题了。
这个题目给我的启示是,虽然看起来简单的题目,也可能有很大的陷阱。如果这是一道面试题的话,估计完全做对的不多,可能也包括现场的我在内。
- [C/C++] 把一个整型整数转成字符串
- C里面怎么把字符串转成数字
- C里面怎么把字符串转成数字
- c语言_十六进制字符串转成对应整型值
- c 把一整数转换为字符串
- 【c语言】把一个长整型给一个字符指针
- C语言字符串转成整数的函数实现
- 把C语言中的enum转成java里面的整型常量
- C++: 整型转字符串
- c字符串转成数字
- C++:如何把一个int转成4个字节?
- C++:如何把一个int转成4个字节?
- 字符串转成整型(int)
- 【C】判断一个字符串是否是整数
- 用C语言将一个字符串转换成整型
- C语言---整型字符串转换
- C语言---整型字符串转换
- C语言---整型字符串转换
- select 语法
- Linux/WinCE C、C++高端课程
- 提交多行数据到Struts的ActionForm的List属性中
- CString, BSTR, LPCTSTR 概念--leo断定->猛贴
- 程序员们纷纷表示“内牛满面”-VS2010视频共5季
- [C/C++] 把一个整型整数转成字符串
- vs2008验证控件的用法
- js 裁剪字符串
- C++中typename关键字的使用方法和注意事项
- 网络摘录,学习计划!觉得还不错。
- 怎么将下面的sql改成Hql?
- 包含所有指定字符的最小子串(shortest substring containing all given characters)
- 相对路径 绝对路径 根目录 上一目录 当前目录
- 泛化,关联,聚合,合成,依赖的关系