由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 大家看看我写的这个itoa有没有bug
相关主题
贡献一道G家的onsite题和简单面经(已悲剧)攒人品,Twitter 电面题目
很可能被这题搞挂了,sort linked list做了一道edit distance,讨论DP的初始化阶段
请问如何sort一个linked list?昨天的F家店面
被thank you的fb电面面经A simple interview question
发一个刚面的startup面经请问如何安全地reverse 一个integer
做了一下merge BST为什么考atoi比itoa要多的多?
罗马转数字,数字转罗马问题这题in place 做不了吧?
G phone interview问一个精华区里的题目
相关话题的讨论汇总
话题: piterbeg话题: numshort话题: piter话题: num话题: piterend
进入JobHunting版参与讨论
1 (共1页)
w****x
发帖数: 2483
1
const char* myitoa(int num, char str[])
{
assert(a);
char* pIterBeg = str;
if (num < 0)
{
num = -num;
*pIterBeg++ = '-';
}
//use long not short to avoid INT_MIN overflow
unsigned int numshort = num;
char* pIter = pIterBeg;
while (true)
{
*pIter++ = numshort%10 + '0';
numshort = numshort/10;
if (numshort == 0) break;
}
*pIter = 0;
int nLen = strlen(pIterBeg);
assert(nLen > 0);
char* pIterEnd = pIterBeg + nLen - 1;
while (pIterEnd > pIterBeg)
swap(*pIterBeg++, *pIterEnd--);
return str;
}
///////////////////////////////////////////////////////////
一次写对一个itoa真的好难!!! 一点都不简单, atoi更难.
w****x
发帖数: 2483
2
pIterBeg++还有overflow的问题
v***a
发帖数: 365
3
有错呢,而且
你那 while (true) 有些豪放,do {} while
求 len 有意义么,
有 pIter 了干嘛还求 pIterEnd 呢,不一样么
assert 有什么用,把调用你函数的程序直接搞死了,扔个NULL或者抛个异常都很好啊

【在 w****x 的大作中提到】
: const char* myitoa(int num, char str[])
: {
: assert(a);
: char* pIterBeg = str;
: if (num < 0)
: {
: num = -num;
: *pIterBeg++ = '-';
: }
: //use long not short to avoid INT_MIN overflow

w****x
发帖数: 2483
4

const char* myitoa(int num, char str[])
{
char* pIterBeg = str;
if (num < 0)
{
num = -num;
*pIterBeg++ = '-';
}
unsigned int numshort = num; //avoid INT_MIN overflow
char* pIter = pIterBeg;
do
{
*pIter++ = numshort%10 + '0';
numshort = numshort/10;
}while (numshort != 0);
*pIter = 0;
char* pIterEnd = pIter - 1;
while (pIterEnd > pIterBeg)
swap(*pIterBeg++, *pIterEnd--);
return str;
}
谢谢提醒, 修改版本

【在 v***a 的大作中提到】
: 有错呢,而且
: 你那 while (true) 有些豪放,do {} while
: 求 len 有意义么,
: 有 pIter 了干嘛还求 pIterEnd 呢,不一样么
: assert 有什么用,把调用你函数的程序直接搞死了,扔个NULL或者抛个异常都很好啊

w****x
发帖数: 2483
5
assert是在debug版本里暴露逻辑错误的, release不管
pIterEnd看上去比较清楚一些, 和pIterBeg对应
v***a
发帖数: 365
6
你觉得好就好了,但还是有错啊

【在 w****x 的大作中提到】
: assert是在debug版本里暴露逻辑错误的, release不管
: pIterEnd看上去比较清楚一些, 和pIterBeg对应

S******t
发帖数: 151
7
弱问一下,如果itoa的实现直接暴力sprintf去了,这个可以么……
y****e
发帖数: 1012
8
同问~~~
如果不行,是不是只需要支持2,8,26,20进制的数?

【在 S******t 的大作中提到】
: 弱问一下,如果itoa的实现直接暴力sprintf去了,这个可以么……
1 (共1页)
进入JobHunting版参与讨论
相关主题
问一个精华区里的题目发一个刚面的startup面经
菜鸟求救 请大家看看我的代码有没有问题做了一下merge BST
问个题?罗马转数字,数字转罗马问题
C++ 面试题G phone interview
贡献一道G家的onsite题和简单面经(已悲剧)攒人品,Twitter 电面题目
很可能被这题搞挂了,sort linked list做了一道edit distance,讨论DP的初始化阶段
请问如何sort一个linked list?昨天的F家店面
被thank you的fb电面面经A simple interview question
相关话题的讨论汇总
话题: piterbeg话题: numshort话题: piter话题: num话题: piterend